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