#ifndef DbgTrace_H
#define DbgTrace_H
// debug/tracing levels
// none (silent)
#define TRACE_LEVEL_NONE (0)
// +errors
#define TRACE_LEVEL_ERROR (1)
// +warnings
#define TRACE_LEVEL_WARNING (2)
// +informations
#define TRACE_LEVEL_INFO (3)
// +everything else
#define TRACE_LEVEL_DEBUG (4)
typedef struct DbgTrace DbgTrace;
struct DbgTrace {
VOID (NDAPI *SetLevel)(
DbgTrace *This,
int Level
);
VOID (NDAPI *Track)(
DbgTrace *This,
int Level,
LPCWSTR Msg
);
VOID (NDAPIV *TrackV)(
DbgTrace *This,
int Level,
LPCWSTR Msg,
...
);
int Level;
};
DbgTrace*
DbgTrace_GetObject(
VOID
);
// macros
#define DbgTrace_Track(This, Level, Msg) \
((This->Track)((This), (Level), (Msg)))
#define DbgTrace_Track0(This, Level, Msg) \
(This->TrackV((This), (Level), (Msg)))
#define DbgTrace_Track1(This, Level, Msg, Arg1) \
(This->TrackV((This), (Level), (Msg), (Arg1)))
#define DbgTrace_Track2(This, Level, Msg, Arg1, Arg2) \
(This->TrackV((This), (Level), (Msg), (Arg1), (Arg2)))
#define DbgTrace_Track3(This, Level, Msg, Arg1, Arg2, Arg3) \
(This->TrackV((This), (Level), (Msg), (Arg1), (Arg2), (Arg3)))
#define DbgTrace_Track4(This, Level, Msg, Arg1, Arg2, Arg3, Arg4) \
(This->TrackV((This), (Level), (Msg), (Arg1), (Arg2), (Arg3), (Arg4)))
#define DbgTrace_Track5(This, Level, Msg, Arg1, Arg2, Arg3, Arg4, Arg5) \
(This->TrackV((This), (Level), (Msg), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5)))
#define DTrace(Level, Msg) \
DbgTrace_Track(DbgTrace_GetObject(), (Level), (Msg))
#define DTrace0(Level, Msg) \
DbgTrace_Track0(DbgTrace_GetObject(), (Level), (Msg))
#define DTrace1(Level, Msg, Arg1) \
DbgTrace_Track1(DbgTrace_GetObject(), (Level), (Msg), (Arg1))
#define DTrace2(Level, Msg, Arg1, Arg2) \
DbgTrace_Track2(DbgTrace_GetObject(), (Level), (Msg), (Arg1), (Arg2))
#define DTrace3(Level, Msg, Arg1, Arg2, Arg3) \
DbgTrace_Track3(DbgTrace_GetObject(), (Level), (Msg), (Arg1), (Arg2), (Arg3))
#define DTrace4(Level, Msg, Arg1, Arg2, Arg3, Arg4) \
DbgTrace_Track4(DbgTrace_GetObject(), (Level), (Msg), (Arg1), (Arg2), (Arg3), (Arg4))
#define DTrace5(Level, Msg, Arg1, Arg2, Arg3, Arg4, Arg5) \
DbgTrace_Track5(DbgTrace_GetObject(), (Level), (Msg), (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
#endif // DbgTrace_H