BESDebug.h

Go to the documentation of this file.
00001 // BESDebug.h
00002 
00003 // This file is part of bes, A C++ back-end server implementation framework
00004 // for the OPeNDAP Data Access Protocol.
00005 
00006 // Copyright (c) 2004-2009 University Corporation for Atmospheric Research
00007 // Author: Patrick West <pwest@ucar.edu> and Jose Garcia <jgarcia@ucar.edu>
00008 //
00009 // This library is free software; you can redistribute it and/or
00010 // modify it under the terms of the GNU Lesser General Public
00011 // License as published by the Free Software Foundation; either
00012 // version 2.1 of the License, or (at your option) any later version.
00013 //
00014 // This library is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 // Lesser General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU Lesser General Public
00020 // License along with this library; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 //
00023 // You can contact University Corporation for Atmospheric Research at
00024 // 3080 Center Green Drive, Boulder, CO 80301
00025 
00026 // (c) COPYRIGHT University Corporation for Atmospheric Research 2004-2005
00027 // Please read the full copyright statement in the file COPYRIGHT_UCAR.
00028 //
00029 // Authors:
00030 //      pwest       Patrick West <pwest@ucar.edu>
00031 //      jgarcia     Jose Garcia <jgarcia@ucar.edu>
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 int
00228 main( int argc, char **argv )
00229 {
00230     int some_number = 1 ;
00231     BESDEBUG( "something", "Shouldn't be seeing this part 1: " << some_number++ << endl )
00232     BESDebug::Set( "something", false ) ;
00233     BESDEBUG( "something", "Shouldn't be seeing this part 2: " << some_number++ << endl )
00234     BESDebug::Set( "something", true ) ;
00235     BESDEBUG( "something", "Should be seeing this: " << some_number++ << endl )
00236 
00237     return 0 ;
00238 }
00239 */
00240 

Generated on Sat Aug 22 06:04:33 2009 for OPeNDAP Hyrax Back End Server (BES) by  doxygen 1.6.0