00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ZDebug__
00026 #define __ZDebug__ 1
00027 #include "zconfig.h"
00028
00029 enum ZDebug_Action { eDebug_ActionContinue, eDebug_ActionStop };
00030
00031 typedef void (*ZDebug_HandleInitial_t)(int inLevel, ZDebug_Action inAction, const char* inFilename,
00032 int inLine, const char* inAssertionMessage, const char* inUserMessage);
00033
00034 typedef void (*ZDebug_HandleActual_t)(int inLevel, ZDebug_Action inAction, const char* inMessage);
00035
00036 extern ZDebug_HandleInitial_t sDebug_HandleInitial;
00037 extern ZDebug_HandleActual_t sDebug_HandleActual;
00038
00039 void ZDebug_DisplayMessageSimple(const char* message, ...);
00040
00041 const char* ZDebug_FormatMessage(const char* iMessage, ...);
00042
00043 inline const char* ZDebug_FormatMessage() { return nil; }
00044
00045
00046
00047
00048
00049 #define ZDebugPrintf(a, b) ((a)<=ZCONFIG_Debug ? ZDebug_DisplayMessageSimple b : ((void)0))
00050
00051 #define ZDebugLogf(a, b) \
00052 ((a) <= ZCONFIG_Debug && sDebug_HandleInitial ? \
00053 sDebug_HandleInitial(a, eDebug_ActionContinue, __FILE__, __LINE__, 0, ZDebug_FormatMessage b) \
00054 : ((void)0))
00055
00056 #define ZDebugStopf(a, b) \
00057 ((a) <= ZCONFIG_Debug && sDebug_HandleInitial ? \
00058 sDebug_HandleInitial(a, eDebug_ActionStop, __FILE__, __LINE__, 0, ZDebug_FormatMessage b) \
00059 : ((void)0))
00060
00061 #define ZDebugLog(a) \
00062 ((a) <= ZCONFIG_Debug && sDebug_HandleInitial ? \
00063 sDebug_HandleInitial(a, eDebug_ActionContinue, __FILE__, __LINE__, 0, 0) : ((void)0))
00064
00065 #define ZDebugStop(a) \
00066 ((a)<=ZCONFIG_Debug && sDebug_HandleInitial ? \
00067 sDebug_HandleInitial(a, eDebug_ActionStop, __FILE__, __LINE__, 0, 0): ((void)0))
00068
00069 #define ZAssertLogf(a, b, c) \
00070 ((a) <= ZCONFIG_Debug && sDebug_HandleInitial && !(b) ? \
00071 sDebug_HandleInitial(a, eDebug_ActionContinue, __FILE__, __LINE__, #b, \
00072 ZDebug_FormatMessage c), false : true)
00073
00074 #define ZAssertStopf(a, b, c) \
00075 ((a) <= ZCONFIG_Debug && sDebug_HandleInitial && !(b) ? \
00076 sDebug_HandleInitial(a, eDebug_ActionStop, __FILE__, __LINE__, #b, \
00077 ZDebug_FormatMessage c), false : true)
00078
00079 #define ZAssertLog(a, b) \
00080 ((a) <= ZCONFIG_Debug && sDebug_HandleInitial && !(b) ? \
00081 sDebug_HandleInitial(a, eDebug_ActionContinue, __FILE__, __LINE__, #b, nil), false : true)
00082
00083 #define ZAssertStop(a, b) \
00084 ((a)<=ZCONFIG_Debug && sDebug_HandleInitial && !(b) ? \
00085 sDebug_HandleInitial(a, eDebug_ActionStop, __FILE__, __LINE__, #b, nil), false : true)
00086
00087
00088
00089
00090
00091 #define ZAssertCompile(a) extern int sCompileTimeAssertionViolated[(a) ? 1 : 0]
00092
00093
00094
00095 #define ZUnimplemented() ZDebugStopf(0, ("Unimplemented routine"))
00096
00097
00098 #define ZAssert(a) ZAssertStop(1, a)
00099
00100
00101
00102
00103
00104 #define ZDebug_Message_AssertionAndUser "Assertion failed: %s. %s, %s:%d"
00105 #define ZDebug_Message_AssertionOnly "Assertion failed: %s, %s:%d"
00106 #define ZDebug_Message_UserOnly "%s, %s:%d"
00107 #define ZDebug_Message_None "%s:%d"
00108
00109 #endif // __ZDebug__