UniSet
1.4.0
|
00001 // -*- C++ -*- 00002 00003 // Created by Lars Gullik BjЬnnes 00004 // Copyright 1999 Lars Gullik BjЬnnes (larsbj@lyx.org) 00005 // Released into the public domain. 00006 00007 // Implemented and tested on g++ 2.7.2.3 00008 00009 // Primarily developed for use in the LyX Project http://www.lyx.org/ 00010 // but should be adaptable to any project. 00011 00012 // (c) 2002 adapted for UniSet by Lav, GNU GPL license 00013 00014 #ifndef DEBUGSTREAM_H 00015 #define DEBUGSTREAM_H 00016 00017 //#ifdef __GNUG__ 00018 //#pragma interface 00019 //#endif 00020 00021 #include <iostream> 00022 #include <string> 00023 00024 #ifdef TEST_DEBUGSTREAM 00025 #include <string> 00026 struct Debug { 00027 enum type { 00028 NONE = 0, 00029 INFO = (1 << 0), // 1 00030 WARN = (1 << 1), // 2 00031 CRIT = (1 << 2) // 4 00032 }; 00033 static const type ANY = type(INFO | WARN | CRIT); 00034 static Debug::type value(std::string const & val) { 00035 if (val == "NONE") return Debug::NONE; 00036 if (val == "INFO") return Debug::INFO; 00037 if (val == "WARN") return Debug::WARN; 00038 if (val == "CRIT") return Debug::CRIT; 00039 return Debug::NONE; 00040 } 00041 }; 00042 #endif 00043 00081 class DebugStream : public std::ostream 00082 { 00083 public: 00085 explicit DebugStream(Debug::type t = Debug::NONE); 00086 00088 explicit 00089 DebugStream(char const * f, Debug::type t = Debug::NONE); 00090 00092 ~DebugStream(); 00093 00095 void level(Debug::type t) { 00096 dt = Debug::type(t & Debug::ANY); 00097 } 00098 00100 Debug::type level() const { 00101 return dt; 00102 } 00103 00105 void addLevel(Debug::type t) { 00106 dt = Debug::type(dt | t); 00107 } 00108 00110 void delLevel(Debug::type t) { 00111 dt = Debug::type(dt & ~t); 00112 } 00113 00115 void logFile(const std::string f); 00116 00117 inline std::string getLogFile(){ return fname; } 00118 00120 bool debugging(Debug::type t = Debug::ANY) const 00121 { 00122 if (dt & t) return true; 00123 return false; 00124 } 00125 00126 00131 std::ostream & debug(Debug::type t = Debug::ANY); 00132 // if (dt & t) return *this; 00133 // return nullstream; 00134 // } 00135 00136 00141 std::ostream & operator[](Debug::type t) { 00142 return debug(t); 00143 } 00144 00148 inline std::ostream& to_end(Debug::type t) 00149 { 00150 return this->operator()(t); 00151 } 00152 00156 std::ostream& operator()(Debug::type t); 00157 00158 00159 inline void showDateTime(bool s) 00160 { 00161 show_datetime = s; 00162 } 00163 00164 00165 std::ostream& print_date(Debug::type t, char brk='/'); 00166 std::ostream& print_time(Debug::type t, char brk=':'); 00167 std::ostream& print_datetime(Debug::type t); 00168 00169 00170 std::ostream& pos(int x, int y); 00171 00172 const DebugStream &operator=(const DebugStream& r); 00173 00174 private: 00176 Debug::type dt; 00178 std::ostream nullstream; 00180 struct debugstream_internal; 00182 debugstream_internal * internal; 00183 bool show_datetime; 00184 std::string fname; 00185 00186 }; 00187 00188 #endif