Open
Graph Drawing
Framework

 v.2010.10
 

Logger.h

Go to the documentation of this file.
00001 /*
00002  * $Revision: 2027 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2010-09-01 11:55:17 +0200 (Wed, 01 Sep 2010) $ 
00007  ***************************************************************/
00008  
00053 #ifndef OGDF_LOGGER_H
00054 #define OGDF_LOGGER_H
00055 
00056 #include <ogdf/basic/basic.h>
00057 
00058 namespace ogdf {
00059 
00061 
00119 class OGDF_EXPORT Logger {
00120 
00121 public:
00123     enum Level { LL_MINOR, LL_MEDIUM, LL_DEFAULT, LL_HIGH, LL_ALARM, LL_FORCE };
00125     enum LogMode { LM_GLOBAL, LM_GLOBALLOG, LM_LOG, LM_STATISTIC };
00126 
00127     // CONSTRUCTORS //////////////////////////////////////
00129     Logger() : 
00130         m_loglevel(m_globalloglevel), m_logmode(LM_GLOBAL) {}
00132     Logger(LogMode m) : 
00133         m_loglevel(m_globalloglevel), m_logmode(m) {}
00135     Logger(Level l) : 
00136         m_loglevel(l), m_logmode(LM_GLOBAL) {}
00138     Logger(LogMode m, Level l) : 
00139         m_loglevel(l), m_logmode(m) {}
00140 
00141     // USAGE //////////////////////////////////////
00143     std::ostream& lout(Level l = LL_DEFAULT) const { 
00144         return ((!m_globalstatisticmode && m_logmode==LM_GLOBAL) || m_logmode==LM_GLOBALLOG)
00145                ? ( (l >= m_globalloglevel) ? *world : nirvana ) 
00146                : ( (m_logmode==LM_LOG && l >= m_loglevel && l >= m_minimumloglevel) ? *world : nirvana );
00147     }
00149     std::ostream& sout() const { 
00150         return ((m_globalstatisticmode && m_logmode==LM_GLOBAL) || (m_logmode == LM_STATISTIC)) ? *world : nirvana;
00151     }
00153     std::ostream& fout() const { 
00154         return sfout();
00155     }
00156     
00157     // STATIC USAGE ///////////////////////////////
00159     static std::ostream& slout(Level l = LL_DEFAULT) { 
00160         return ((!m_globalstatisticmode) && l >= m_globalloglevel) ? *world : nirvana;
00161     }
00163     static std::ostream& ssout() { 
00164         return (m_globalstatisticmode) ? *world : nirvana;
00165     }
00167     static std::ostream& sfout() { 
00168         return *world;
00169     }
00170     
00171     // LOCAL //////////////////////////////////////
00173     Level localLogLevel() const { 
00174         return m_loglevel;
00175     }
00177     void localLogLevel(Level l) {
00178         m_loglevel = l;
00179     }
00181     LogMode localLogMode() const { 
00182         return m_logmode;
00183     }
00185     void localLogMode(LogMode m) {
00186         m_logmode = m;
00187     }
00188 
00189     // GLOBAL //////////////////////////////////////
00191     static Level globalLogLevel() { return m_globalloglevel; }
00193     static void globalLogLevel(Level l) { if(l>=m_minimumloglevel) m_globalloglevel = l; }
00194 
00196     static Level globalMinimumLogLevel() { return m_minimumloglevel; }
00198     static void globalMinimumLogLevel(Level l) { if(l<=m_globalloglevel) m_minimumloglevel = l; }
00199     
00201     static bool globalStatisticMode() { return m_globalstatisticmode; }
00203     static void globalStatisticMode(bool s) { m_globalstatisticmode = s; }
00204     
00206     static void setWorldStream(std::ostream& o) { world = &o; }
00207 
00208     // EFFECTIVE //////////////////////////////////////
00210     Level effectiveLogLevel() const { 
00211         if(m_logmode==LM_GLOBAL || m_logmode==LM_GLOBALLOG)
00212             return m_globalloglevel;
00213         else
00214             return (m_loglevel > m_minimumloglevel) ? m_loglevel : m_minimumloglevel;
00215     }
00216     
00218     bool effectiveStatisticMode() const { 
00219         return m_logmode==LM_STATISTIC || (m_logmode==LM_GLOBAL && m_globalstatisticmode);
00220     }
00221     
00222 
00223 private:    
00224     static std::ostream nirvana;
00225     static std::ostream* world; 
00226 
00227     static Level m_globalloglevel;
00228     static Level m_minimumloglevel;
00229     static bool m_globalstatisticmode;
00230 
00231     Level m_loglevel;
00232     LogMode m_logmode;
00233 };
00234 
00235 }
00236 
00237 #endif // OGDF_LOGGER_H
00238