Go to the documentation of this file.00001
00002
00003
00004
00005
00006
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
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
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
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
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
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
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