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
00064 #define BESDEBUG( x, y ) do { if( BESDebug::IsSet( x ) ) *(BESDebug::GetStrm()) << "[" << BESDebug::GetPidStr() << "] " << y ; } while( 0 )
00065
00083 #define BESISDEBUG( x ) BESDebug::IsSet( x )
00084
00085 class BESDebug
00086 {
00087 private:
00088 static map<string,bool> _debug_map ;
00089 static ostream * _debug_strm ;
00090 static bool _debug_strm_created ;
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
00168 static string GetPidStr() ;
00169
00185 static void SetStrm( ostream *strm, bool created )
00186 {
00187 if( _debug_strm_created && _debug_strm )
00188 {
00189 _debug_strm->flush();
00190 delete _debug_strm ;
00191 _debug_strm = NULL ;
00192 }
00193 else if( _debug_strm )
00194 {
00195 _debug_strm->flush() ;
00196 }
00197 if( !strm )
00198 {
00199 _debug_strm = &cerr ;
00200 _debug_strm_created = false ;
00201 }
00202 else
00203 {
00204 _debug_strm = strm ;
00205 _debug_strm_created = created ;
00206 }
00207 }
00208 static void SetUp( const string &values ) ;
00209 static void Help( ostream &strm ) ;
00210 } ;
00211
00212 #endif // I_BESDebug_h
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231