00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _rlog_incl_
00021 #define _rlog_incl_
00022
00023 #define CONCAT2(A,B) A##B
00024 #define CONCAT(A,B) CONCAT2(A,B)
00025 #define STR(X) #X
00026
00027 #include <rlog/common.h>
00028
00034
00035 #define CURRENT_RLOG_VERSION 20040503
00036 extern "C" int RLogVersion();
00037
00038 namespace rlog
00039 {
00040
00041 class RLogChannel;
00042 class RLogPublisher;
00043 class RLogNode;
00044
00048 enum LogLevel
00049 {
00050 Log_Undef =0,
00051 Log_Critical,
00052 Log_Error,
00053 Log_Warning,
00054 Log_Notice,
00055 Log_Info,
00056 Log_Debug
00057 };
00058
00069 void RLOG_DECL RLogInit(int &argc, char **argv);
00070
00071
00072
00073 RLOG_DECL RLogChannel *GetComponentChannel(const char *component,
00074 const char *path,
00075 LogLevel level = Log_Undef);
00076
00077
00078 RLOG_DECL RLogChannel *GetGlobalChannel( const char *path,
00079 LogLevel level = Log_Undef);
00080
00124 #define DEF_CHANNEL(path,level) RLOG_CHANNEL_IMPL(RLOG_COMPONENT, path, level)
00125 #define RLOG_CHANNEL(path) RLOG_CHANNEL_IMPL(RLOG_COMPONENT, path, rlog::Log_Undef)
00126 #define RLOG_CHANNEL_IMPL(COMPONENT,path,level) \
00127 rlog::GetComponentChannel(STR(COMPONENT),path,level)
00128
00129
00130
00131
00132
00133
00134
00135
00136 extern RLOG_DECL RLogChannel *_RLDebugChannel;
00137 extern RLOG_DECL RLogChannel *_RLInfoChannel;
00138 extern RLOG_DECL RLogChannel *_RLWarningChannel;
00139 extern RLOG_DECL RLogChannel *_RLErrorChannel;
00140
00153 struct PublishLoc
00154 {
00155 bool *enabled;
00156
00157
00158
00159
00161 void (*publish)(PublishLoc *, RLogChannel *, const char *format, ... )
00162 PRINTF_FP(3,4);
00163 RLogNode *pub;
00164 const char *component;
00165 const char *fileName;
00166 const char *functionName;
00167 int lineNum;
00168 RLogChannel *channel;
00169
00170 inline void enable() { *enabled = true; }
00171 inline void disable() { *enabled = false; }
00172 inline bool isEnabled() { return *enabled; }
00173
00174 ~PublishLoc();
00175 };
00176
00183 void RLOG_DECL RLog_Register(PublishLoc *loc, RLogChannel *,
00184 const char *format, ... ) PRINTF(3,4);
00185
00191 void RLOG_DECL rAssertFailed( const char *component, const char *file,
00192 const char *function, int line,
00193 const char *conditionStr );
00194
00195
00196
00197 #if !HAVE_PRINTF_FP && HAVE_PRINTF_ATTR
00198 void __checkArgs(int, const char *, ... ) PRINTF(2,3);
00199
00200 inline void __checkArgs(int, const char *, ...)
00201 { }
00202 #endif
00203 }
00204
00205 #if C99_VARIADAC_MACROS
00206 #include <rlog/rlog-c99.h>
00207 #elif PREC99_VARIADAC_MACROS
00208 #include <rlog/rlog-prec99.h>
00209 #else
00210 #include <rlog/rlog-novariadic.h>
00211 #endif
00212
00213
00214 #define _rAssertFailed(COMPONENT, COND) \
00215 rlog::rAssertFailed(STR(COMPONENT),__FILE__,__FUNCTION__,__LINE__, COND)
00216
00227 #define rAssert( cond ) \
00228 do { \
00229 if( unlikely((cond) == false) ) \
00230 { rError( "Assert failed: " STR(cond) ); \
00231 _rAssertFailed(RLOG_COMPONENT, STR(cond)); \
00232 } \
00233 } while(0)
00234
00242 #define rAssertSilent( cond ) \
00243 do { \
00244 if( unlikely((cond) == false) ) \
00245 { _rAssertFailed(RLOG_COMPONENT, STR(cond)); } \
00246 } while(0)
00247
00248
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 #define RLOG_NO_COPY(CNAME) \
00263 private: \
00264 CNAME(const CNAME&); \
00265 CNAME & operator = (const CNAME &)
00266
00267
00268 #endif // rlog.h
00269