Open
Graph Drawing
Framework

 v.2012.05
 

Logger.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2299 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 
00007  ***************************************************************/
00008  
00043 #ifndef OGDF_LOGGER_H
00044 #define OGDF_LOGGER_H
00045 
00046 #include <ogdf/basic/basic.h>
00047 
00048 namespace ogdf {
00049 
00051 
00109 class OGDF_EXPORT Logger {
00110 
00111 public:
00113     enum Level { LL_MINOR, LL_MEDIUM, LL_DEFAULT, LL_HIGH, LL_ALARM, LL_FORCE };
00115     enum LogMode { LM_GLOBAL, LM_GLOBALLOG, LM_LOG, LM_STATISTIC };
00116 
00117     // CONSTRUCTORS //////////////////////////////////////
00119     Logger() : 
00120         m_loglevel(m_globalloglevel), m_logmode(LM_GLOBAL) {}
00122     Logger(LogMode m) : 
00123         m_loglevel(m_globalloglevel), m_logmode(m) {}
00125     Logger(Level l) : 
00126         m_loglevel(l), m_logmode(LM_GLOBAL) {}
00128     Logger(LogMode m, Level l) : 
00129         m_loglevel(l), m_logmode(m) {}
00130 
00131     // USAGE //////////////////////////////////////
00133     std::ostream& lout(Level l = LL_DEFAULT) const { 
00134         return ((!m_globalstatisticmode && m_logmode==LM_GLOBAL) || m_logmode==LM_GLOBALLOG)
00135                ? ( (l >= m_globalloglevel) ? *world : nirvana ) 
00136                : ( (m_logmode==LM_LOG && l >= m_loglevel && l >= m_minimumloglevel) ? *world : nirvana );
00137     }
00139     std::ostream& sout() const { 
00140         return ((m_globalstatisticmode && m_logmode==LM_GLOBAL) || (m_logmode == LM_STATISTIC)) ? *world : nirvana;
00141     }
00143     std::ostream& fout() const { 
00144         return sfout();
00145     }
00146     
00147     // STATIC USAGE ///////////////////////////////
00149     static std::ostream& slout(Level l = LL_DEFAULT) { 
00150         return ((!m_globalstatisticmode) && l >= m_globalloglevel) ? *world : nirvana;
00151     }
00153     static std::ostream& ssout() { 
00154         return (m_globalstatisticmode) ? *world : nirvana;
00155     }
00157     static std::ostream& sfout() { 
00158         return *world;
00159     }
00160     
00161     // LOCAL //////////////////////////////////////
00163     Level localLogLevel() const { 
00164         return m_loglevel;
00165     }
00167     void localLogLevel(Level l) {
00168         m_loglevel = l;
00169     }
00171     LogMode localLogMode() const { 
00172         return m_logmode;
00173     }
00175     void localLogMode(LogMode m) {
00176         m_logmode = m;
00177     }
00178 
00179     // GLOBAL //////////////////////////////////////
00181     static Level globalLogLevel() { return m_globalloglevel; }
00183     static void globalLogLevel(Level l) { if(l>=m_minimumloglevel) m_globalloglevel = l; }
00184 
00186     static Level globalMinimumLogLevel() { return m_minimumloglevel; }
00188     static void globalMinimumLogLevel(Level l) { if(l<=m_globalloglevel) m_minimumloglevel = l; }
00189     
00191     static bool globalStatisticMode() { return m_globalstatisticmode; }
00193     static void globalStatisticMode(bool s) { m_globalstatisticmode = s; }
00194     
00196     static void setWorldStream(std::ostream& o) { world = &o; }
00197 
00198     // EFFECTIVE //////////////////////////////////////
00200     Level effectiveLogLevel() const { 
00201         if(m_logmode==LM_GLOBAL || m_logmode==LM_GLOBALLOG)
00202             return m_globalloglevel;
00203         else
00204             return (m_loglevel > m_minimumloglevel) ? m_loglevel : m_minimumloglevel;
00205     }
00206     
00208     bool effectiveStatisticMode() const { 
00209         return m_logmode==LM_STATISTIC || (m_logmode==LM_GLOBAL && m_globalstatisticmode);
00210     }
00211     
00212 
00213 private:    
00214     static std::ostream nirvana;
00215     static std::ostream* world; 
00216 
00217     static Level m_globalloglevel;
00218     static Level m_minimumloglevel;
00219     static bool m_globalstatisticmode;
00220 
00221     Level m_loglevel;
00222     LogMode m_logmode;
00223 };
00224 
00225 }
00226 
00227 #endif // OGDF_LOGGER_H
00228