eLynx SDK
v3.3.0 C++ image processing API reference |
00001 //============================================================================ 00002 // CoreTrace.h Core.Component package 00003 //============================================================================ 00004 // Usage : trace definition 00005 //---------------------------------------------------------------------------- 00006 // Copyright (C) 2006 by eLynx project 00007 // 00008 // This library is free software; you can redistribute it and/or 00009 // modify it under the terms of the GNU Library General Public 00010 // License as published by the Free Software Foundation; either 00011 // version 2 of the License, or (at your option) any later version. 00012 // 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00016 // See the GNU Library General Public License for more details. 00017 //---------------------------------------------------------------------------- 00018 #ifndef __CoreTrace_h__ 00019 #define __CoreTrace_h__ 00020 00021 #include "CoreLib.h" 00022 #include <elx/core/CoreOS.h> 00023 00024 namespace eLynx { 00025 00026 #ifdef elxDEBUG // debug mode 00027 00029 #ifdef elxWINDOWS 00030 # define elxPRINT(_iMessage_) { OutputDebugString(_iMessage_); } 00031 #elif elxLINUX 00032 # define elxPRINT(_iMessage_) { ::printf(_iMessage_); } 00033 #elif elxMACOSX 00034 # define elxPRINT(_iMessage_) { ::printf(_iMessage_); } 00035 #endif 00036 00038 // Logging levels 00039 enum ELogLevel 00040 { 00041 LL_DEBUG = 0, 00042 LL_INFO, 00043 LL_PROD, 00044 LL_WARNING, 00045 LL_ERROR, 00046 LL_FATAL, 00047 LL_NOT_DEFINED 00048 }; 00049 00053 ExportedByCore ELogLevel elxGetLogLevel(const char * iprModule); 00054 00055 template <typename T> struct logger; 00056 #define elxDEFINE_MODULE_LOGGER(MODULE) \ 00057 enum elx##MODULE##_NAME {MODULE##_E}; \ 00058 template<> struct logger<elx##MODULE##_NAME> \ 00059 { \ 00060 ELogLevel _level; \ 00061 logger<elx##MODULE##_NAME>() : \ 00062 _level(eLynx::elxGetLogLevel(#MODULE)){} \ 00063 static logger<elx##MODULE##_NAME>& instance() \ 00064 { \ 00065 static logger<elx##MODULE##_NAME> ms_Logger; \ 00066 return ms_Logger; \ 00067 } \ 00068 }; \ 00069 typedef logger<elx##MODULE##_NAME> 00070 00071 00072 #define elxLOG(_iLEVEL_, _iMODULE_LOGGER_, _iMessage_) \ 00073 { \ 00074 if (_iMODULE_LOGGER_::instance()._level != LL_NOT_DEFINED && \ 00075 _iMODULE_LOGGER_::instance()._level <= _iLEVEL_) \ 00076 { \ 00077 ::printf _iMessage_; \ 00078 } \ 00079 } 00080 00081 # define elxTRACE_DEBUG(_iMODULE_LOGGER_, _iMessage_) \ 00082 elxLOG(LL_DEBUG, _iMODULE_LOGGER_, _iMessage_) 00083 00084 # define elxTRACE_INFO(_iMODULE_LOGGER_, _iMessage_) \ 00085 elxLOG(LL_INFO, _iMODULE_LOGGER_, _iMessage_) 00086 00087 # define elxTRACE_PROD(_iMODULE_LOGGER_, _iMessage_) \ 00088 elxLOG(LL_PROD, _iMODULE_LOGGER_, _iMessage_) 00089 00090 # define elxTRACE_WARNING(_iMODULE_LOGGER_, _iMessage_) \ 00091 elxLOG(LL_WARNING, _iMODULE_LOGGER_, _iMessage_) 00092 00093 # define elxTRACE_ERROR(_iMODULE_LOGGER_, _iMessage_) \ 00094 elxLOG(LL_ERROR, _iMODULE_LOGGER_, _iMessage_) 00095 00096 # define elxTRACE_FATAL(_iMODULE_LOGGER_, _iMessage_) \ 00097 elxLOG(LL_FATAL, _iMODULE_LOGGER_, _iMessage_) 00098 00099 elxDEFINE_MODULE_LOGGER(CORE) CORE_L; 00100 00101 #else // Release mode 00102 00103 // No trace 00104 # define elxDEFINE_MODULE_LOGGER(MODULE) 00105 # define elxTRACE(_iMODULE_LOGGER_, _iMessage_, _iLEVEL_) 00106 # define elxTRACE_DEBUG(_iMODULE_LOGGER_, _iMessage_) 00107 # define elxTRACE_INFO(_iMODULE_LOGGER_, _iMessage_) 00108 # define elxTRACE_PROD(_iMODULE_LOGGER_, _iMessage_) 00109 # define elxTRACE_WARNING(_iMODULE_LOGGER_, _iMessage_) 00110 # define elxTRACE_ERROR(_iMODULE_LOGGER_, _iMessage_) 00111 # define elxTRACE_FATAL(_iMODULE_LOGGER_, _iMessage_) 00112 00113 #endif // debug/release mode 00114 00115 } // namespace eLynx 00116 00117 #include <elx/core/inl/CoreTrace.inl> 00118 00119 #endif // __CoreTrace_h__