00001 /* 00002 SagaEngine library 00003 Copyright (c) 2002-2006 Skalden Studio AS 00004 00005 This software is provided 'as-is', without any express or implied 00006 warranty. In no event will the authors be held liable for any 00007 damages arising from the use of this software. 00008 00009 Permission is granted to distribute the library under the terms of the 00010 Q Public License version 1.0. Be sure to read and understand the license 00011 before using the library. It should be included here, or you may read it 00012 at http://www.trolltech.com/products/qt/licenses/licensing/qpl 00013 00014 The original version of this library can be located at: 00015 http://www.sagaengine.com/ 00016 00017 Rune Myrland 00018 rune@skalden.com 00019 */ 00020 00021 00022 #ifndef Log_hpp 00023 #define Log_hpp 00024 00025 #include "../type/String.hpp" 00026 #include "../type/util_type.hpp" 00027 00028 extern _SeCoreExport char* log_msg(); 00029 00030 00031 namespace se_err { 00033 extern _SeCoreExport void scream3(const char* file, int line, const char* msg2); 00034 extern _SeCoreExport void say3(const char* file, int line, const char* msg2); 00035 extern _SeCoreExport void whisper3(const char* file, int line, const char* msg2); 00036 extern _SeCoreExport void silent3(const char* file, int line, const char* msg2); 00037 extern _SeCoreExport void dump(const char *s); 00040 class _SeCoreExport Log { 00041 public: 00042 Log() : msgPos_(0), file_(0), line_(0) { 00043 msg_[0] = 0; 00044 } 00045 00046 Log& file(const char* file, int line); 00047 Log& scream(); 00048 Log& say(); 00049 Log& whisper(); 00050 Log& silent(); 00051 Log& operator << (const char* msg); 00052 Log& operator << (float n); 00053 Log& operator << (double n); 00054 Log& operator << (unsigned int n); 00055 Log& operator << (int n); 00056 Log& operator << (char c); 00057 Log& operator << (unsigned long n); 00058 Log& operator << (long n); 00059 Log& operator << (long long n); 00060 Log& operator << (bray_t c); 00061 Log& operator << (const se_core::String& s); 00062 Log& operator << (const se_core::String* s); 00063 Log& mem(int n); 00064 00065 static Log& singleton() { 00066 static Log log; 00067 return log; 00068 } 00069 00070 void copy(const char* msg) { 00071 while(msgPos_ < MAX_MSG_SIZE - 1 && *msg != 0) { 00072 msg_[ msgPos_++ ] = *(msg++); 00073 } 00074 msg_[msgPos_] = 0; 00075 } 00076 00077 char* tmp() { 00078 return tmp_; 00079 } 00080 00081 private: 00082 static const short MAX_MSG_SIZE = 512; 00083 short msgPos_; 00084 char msg_[MAX_MSG_SIZE]; 00085 char tmp_[MAX_MSG_SIZE]; 00086 00087 const char* file_; 00088 int line_; 00089 }; 00090 } 00091 00092 #ifdef DEBUG_LEVEL_2 00093 00094 #ifndef IS_OGRE 00095 void * operator new (size_t size, char const * file, int line); 00096 void * operator new[](size_t size, char const * file, int line); 00097 #define new new(__FILE__, __LINE__) 00098 #endif 00099 00100 #define Assert(b) if(!(b)) { se_err::debugStop(); se_err::scream3(__FILE__, __LINE__, # b); } 00101 #define DbgAssert(b) if(!(b)) { se_err::debugStop(); se_err::scream3(__FILE__, __LINE__, # b); } 00102 #define AssertFatal(b, msg) if(!(b)) { (se_err::Log::singleton().file(__FILE__, __LINE__) << (# b) << (" ") << msg ).scream(); } 00103 #define AssertWarning(b, msg) if(!(b)) { (se_err::Log::singleton().file(__FILE__, __LINE__) << (# b) << (" ") << msg ).say(); } 00104 #define LogFatal(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).scream() 00105 #define DbgLogFatal(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).scream() 00106 #define LogWarning(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).say() 00107 #define LogMessage(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).whisper() 00108 #define LogDetail(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).silent() 00109 #define DebugExec(n) n 00110 #define WasHere() { se_err::whisper3(__FILE__, __LINE__, __FUNCTION__); } 00111 #define Dump(msg) { se_err::dump(msg); se_err::dump("\n"); } 00112 #define DumpAllocs se_err::dumpAlloc(); 00113 00114 namespace se_err { 00115 00116 extern _SeCoreExport short debug_state; 00117 extern _SeCoreExport void dumpAlloc(); 00118 extern _SeCoreExport void debugStop(); 00119 00120 extern _SeCoreExport int usedMem, maxUsedMem, objects, arrays, m2aCount, maxM2aCount; 00121 } 00122 #endif 00123 00124 00125 00126 #ifdef DEBUG_LEVEL_1 00127 00128 #define Assert(b) if(!(b)) { se_err::scream3(__FILE__, __LINE__, # b); } 00129 #define AssertFatal(b, msg) if(!(b)) { (se_err::Log::singleton().file(__FILE__, __LINE__) << (# b) << (" ") << msg ).scream(); } 00130 #define AssertWarning(b, msg) if(!(b)) { (se_err::Log::singleton().file(__FILE__, __LINE__) << (# b) << (" ") << msg ).say(); } 00131 //#define LogFatal(n) se_err::scream3(__FILE__, __LINE__, n) 00132 #define LogFatal(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).scream() 00133 #define DbgLogFatal(n) 00134 #define DbgAssert(b) 00135 //#define LogDetail(msg) 00136 #define LogWarning(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).say() 00137 #define LogMessage(msg) (se_err::Log::singleton().file(__FILE__, __LINE__) << msg ).whisper() 00138 #define LogDetail(msg) 00139 // se_err::debugStop() 00140 //{ se_err::say3(__FILE__, __LINE__, __FUNCTION__); } 00141 #define DebugExec(n) 00142 #define WasHere() 00143 #define Dump(msg) 00144 #define DumpAllocs 00145 #endif 00146 00147 #endif 00148 00149 namespace se_err { 00150 extern _SeCoreExport void hello(); 00151 } 00152 #ifndef Assert 00153 #define Assert(b) 00154 #define AssertFatal(b, m) 00155 #define AssertWarning(b, m) 00156 #define LogFatal(n) 00157 #define DbgLogFatal(n) 00158 #define DbgAssert(b) 00159 #define LogDetail(msg) 00160 #define LogWarning(msg) 00161 #define LogMessage(msg) 00162 // Prevents strange bug in release mode ... 00163 //se_err::hello() 00164 #define DebugExec(n) 00165 #define WasHere() 00166 #define Dump(msg) 00167 #define DumpAllocs 00168 #endif 00169
Home Page | SagaEngine trunk (updated nightly) reference generated Sun Dec 2 20:06:12 2007 by Doxygen version 1.3.9.1.