表格线识别通用库文档
载入中...
搜索中...
未找到
macro.h
浏览该文件的文档.
1/*
2 * @Description: 宏 头文件
3 * @Version:
4 * @Autor: dreamy-xay
5 * @Date: 2023-12-01 15:02:12
6 * @LastEditors: dreamy-xay
7 * @LastEditTime: 2024-05-18
8 */
9
10#ifndef COMMON_MACRO_H
11#define COMMON_MACRO_H
12
13#include <iostream>
14
24#ifndef DEBUG_VALUE
25#define Cm_DEBUG_MODE 1
26#else
27#define Cm_DEBUG_MODE DEBUG_VALUE
28#endif
29
48#ifdef __GNUC__
49#define Cm_FUNCTION_NAME __PRETTY_FUNCTION__
50#elif defined(_MSC_VER)
51#define Cm_FUNCTION_NAME __FUNCSIG__
52#else
53#define Cm_FUNCTION_NAME __func__
54#endif
55
77#ifdef __GNUC__
78#define Cm_WEAK_ATTRIBUTE __attribute__((weak))
79#elif defined(_MSC_VER)
80#define Cm_WEAK_ATTRIBUTE __declspec(selectany)
81#else
82#define Cm_WEAK_ATTRIBUTE
83#endif
84
108#if (Cm_DEBUG_MODE == 1)
109#define Cm_Assert(expr, message) \
110 do { \
111 if (!!(expr)) \
112 ; \
113 else { \
114 std::cerr << "Assertion failed: " << #expr \
115 << " in function " << Cm_FUNCTION_NAME \
116 << " at " << __FILE__ \
117 << " line " << __LINE__ \
118 << " with message: " << (message) << std::endl; \
119 std::abort(); \
120 } \
121 } while (0)
122#else
123#define Cm_Assert(expr, message)
124#endif
125
143#if (Cm_DEBUG_MODE == 1)
144#define Cm_DebugExpression(expr) \
145 do { \
146 std::cout << "\n" \
147 << cm::Color::MAGENTA_BG + cm::Color::FONT_BOLD << "[file:" << __FILE__ << "]" << cm::Color::RESET << " "; \
148 std::cout << cm::Color::YELLOW_BG + cm::Color::FONT_BOLD << "[line:" << __LINE__ << "]" << cm::Color::RESET << " "; \
149 std::cout << cm::Color::RED_BG + cm::Color::FONT_BOLD << "[START]" << cm::Color::RESET << " \n"; \
150 (expr); \
151 std::cout << "\n" \
152 << cm::Color::MAGENTA_BG + cm::Color::FONT_BOLD << "[file:" << __FILE__ << "]" << cm::Color::RESET << " "; \
153 std::cout << cm::Color::YELLOW_BG + cm::Color::FONT_BOLD << "[line:" << __LINE__ << "]" << cm::Color::RESET << " "; \
154 std::cout << cm::Color::RED_BG + cm::Color::FONT_BOLD << "[END]" << cm::Color::RESET << std::endl; \
155 } while (0)
156#else
157#define Cm_DebugExpression(expr)
158#endif
159
186#if (Cm_DEBUG_MODE == 1)
187#define Cm_DebugPrint(...) Cm_DebugExpression(cm::Debug::Print(__VA_ARGS__))
188#else
189#define Cm_DebugPrint(...)
190#endif
191
218#if (Cm_DEBUG_MODE == 1)
219#define Cm_DebugCPrint(...) Cm_DebugExpression(cm::Debug::CPrint(#__VA_ARGS__, __VA_ARGS__))
220#else
221#define Cm_DebugCPrint(...)
222#endif
223
224#endif
225
270#if (Cm_DEBUG_MODE == 1)
271#define Cm_Release_Exception_Start
272#define Cm_Release_Exception_Empty_Catch(EXCEPTION_TYPE, expr)
273#define Cm_Release_Exception_Catch(EXCEPTION_TYPE, expr)
274#define Cm_Release_Exception_End(expr)
275#else
276#define Cm_Release_Exception_Start try {
277#define Cm_Release_Exception_Empty_Catch(EXCEPTION_TYPE, expr) \
278 } \
279 catch (const EXCEPTION_TYPE &e) { \
280 { expr; };
281#define Cm_Release_Exception_Catch(EXCEPTION_TYPE, expr) Cm_Release_Exception_Empty_Catch(EXCEPTION_TYPE, { \
282 std::cerr << "Caught exception: in function " << Cm_FUNCTION_NAME \
283 << " at " << __FILE__ \
284 << " line " << __LINE__ \
285 << " with message: " << e.what() << std::endl; \
286 { expr; }; \
287})
288#define Cm_Release_Exception_End(expr) \
289 Cm_Release_Exception_Catch(std::exception, { expr; }) \
290 } \
291 catch (...) { \
292 std::cerr << "Caught unknown exception: in function " << Cm_FUNCTION_NAME \
293 << " at " << __FILE__ \
294 << " line " << __LINE__ << std::endl; \
295 { expr; }; \
296 }
297#endif