00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00036 #ifndef I_BESDebug_h
00037 #define I_BESDebug_h 1
00038
00039 #include <iostream>
00040 #include <map>
00041 #include <string>
00042
00043 using std::cerr ;
00044 using std::endl ;
00045 using std::ostream ;
00046 using std::map ;
00047 using std::string ;
00048
00049 #include "BESUtil.h"
00050
00063 #define BESDEBUG( x, y ) { if( BESDebug::IsSet( x ) ) *(BESDebug::GetStrm()) << "[" << BESDebug::GetPidStr() << "] " << y ; }
00064
00082 #define BESISDEBUG( x ) BESDebug::IsSet( x )
00083
00084 class BESDebug
00085 {
00086 private:
00087 static map<string,bool> _debug_map ;
00088 static ostream * _debug_strm ;
00089 static bool _debug_strm_created ;
00090 static string _pid_str ;
00091 typedef map<string,bool>::const_iterator _debug_citer ;
00092 typedef map<string,bool>::iterator _debug_iter ;
00093 public:
00104 static void Set( const string &flagName, bool value )
00105 {
00106 if( flagName == "all" && value )
00107 {
00108 _debug_iter i = _debug_map.begin() ;
00109 _debug_iter e = _debug_map.end() ;
00110 for( ; i != e; i++ )
00111 {
00112 (*i).second = true ;
00113 }
00114 }
00115 _debug_map[flagName] = value ;
00116 }
00124 static void Register( const string &flagName )
00125 {
00126 _debug_citer a = _debug_map.find( "all" ) ;
00127 _debug_citer i = _debug_map.find( flagName ) ;
00128 if( i == _debug_map.end() )
00129 {
00130 if( a == _debug_map.end() )
00131 {
00132 _debug_map[flagName] = false ;
00133 }
00134 else
00135 {
00136 _debug_map[flagName] = true ;
00137 }
00138 }
00139 }
00145 static bool IsSet( const string &flagName )
00146 {
00147 _debug_citer i = _debug_map.find( flagName ) ;
00148 if( i != _debug_map.end() )
00149 return (*i).second ;
00150 else
00151 i = _debug_map.find( "all" ) ;
00152 if( i != _debug_map.end() )
00153 return (*i).second ;
00154 else
00155 return false ;
00156 }
00163 static ostream * GetStrm()
00164 {
00165 return _debug_strm ;
00166 }
00167
00172 static string GetPidStr()
00173 {
00174 if( _pid_str.empty() )
00175 {
00176 char mypid[12] ;
00177 BESUtil::fastpidconverter( mypid, 10 ) ;
00178 _pid_str = mypid ;
00179 }
00180 return _pid_str ;
00181 }
00197 static void SetStrm( ostream *strm, bool created )
00198 {
00199 if( _debug_strm_created && _debug_strm )
00200 {
00201 _debug_strm->flush();
00202 delete _debug_strm ;
00203 _debug_strm = NULL ;
00204 }
00205 else if( _debug_strm )
00206 {
00207 _debug_strm->flush() ;
00208 }
00209 if( !strm )
00210 {
00211 _debug_strm = &cerr ;
00212 _debug_strm_created = false ;
00213 }
00214 else
00215 {
00216 _debug_strm = strm ;
00217 _debug_strm_created = created ;
00218 }
00219 }
00220 static void SetUp( const string &values ) ;
00221 static void Help( ostream &strm ) ;
00222 } ;
00223
00224 #endif // I_BESDebug_h
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240