#ifndef DIDACTYL_DEBUG_H #define DIDACTYL_DEBUG_H #include #include typedef enum { DEBUG_LEVEL_NONE = 0, DEBUG_LEVEL_ERROR = 1, DEBUG_LEVEL_WARN = 2, DEBUG_LEVEL_INFO = 3, DEBUG_LEVEL_DEBUG = 4, DEBUG_LEVEL_TRACE = 5 } debug_level_t; extern debug_level_t g_debug_level; void debug_init(int level); void debug_log(debug_level_t level, const char* file, int line, const char* format, ...); #define DEBUG_ERROR(...) \ do { if (g_debug_level >= DEBUG_LEVEL_ERROR) debug_log(DEBUG_LEVEL_ERROR, __FILE__, __LINE__, __VA_ARGS__); } while(0) #define DEBUG_WARN(...) \ do { if (g_debug_level >= DEBUG_LEVEL_WARN) debug_log(DEBUG_LEVEL_WARN, __FILE__, __LINE__, __VA_ARGS__); } while(0) #define DEBUG_INFO(...) \ do { if (g_debug_level >= DEBUG_LEVEL_INFO) debug_log(DEBUG_LEVEL_INFO, __FILE__, __LINE__, __VA_ARGS__); } while(0) #define DEBUG_LOG(...) \ do { if (g_debug_level >= DEBUG_LEVEL_DEBUG) debug_log(DEBUG_LEVEL_DEBUG, __FILE__, __LINE__, __VA_ARGS__); } while(0) #define DEBUG_TRACE(...) \ do { if (g_debug_level >= DEBUG_LEVEL_TRACE) debug_log(DEBUG_LEVEL_TRACE, __FILE__, __LINE__, __VA_ARGS__); } while(0) #endif