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 
00064 #define BESDEBUG( x, y ) if( BESDebug::IsSet( x ) ) *(BESDebug::GetStrm()) << "[" << BESDebug::GetPidStr() << "] " << y
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 int
00216 main( int argc, char **argv )
00217 {
00218     int some_number = 1 ;
00219     BESDEBUG( "something", "Shouldn't be seeing this part 1: "
00220                            << some_number++ << endl ) ;
00221     BESDebug::Set( "something", false ) ;
00222     BESDEBUG( "something", "Shouldn't be seeing this part 2: "
00223                            << some_number++ << endl ) ;
00224     BESDebug::Set( "something", true ) ;
00225     BESDEBUG( "something", "Should be seeing this: "
00226                            << some_number++ << endl ) ;
00227 
00228     return 0 ;
00229 }
00230 */
00231 
Generated by  doxygen 1.6.2-20100208