Faro Engine 0.0.0.b519570 (main)
Loading...
Searching...
No Matches
Assert.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <type_traits>
4#include <iostream>
5
6#if FARO_DEBUG // Define internal debugging macros
7
8 #if FARO_OS_WINDOWS
9
10 #include <sstream>
11 #include <MinWindows.hpp>
12 #define DebugOutputMessage(message) \
13 { \
14 std::cerr << message; \
15 std::ostringstream stream; \
16 stream << message; \
17 OutputDebugStringA(stream.str().c_str()); \
18 }
19 #define Debug_Break() __debugbreak()
20
21 #elif FARO_OS_WEB
22
23 #define DebugOutputMessage(message) \
24 { \
25 std::cerr << message; \
26 }
27
28 #define Debug_Break()
29
30 #else
31
32 #define DebugOutputMessage(message) \
33 { \
34 std::cerr << message; \
35 }
36
37 #define Debug_Break() raise(SIGTRAP)
38 #endif
39
40#define _DebugCheck(expression, expressionString, message, filename, lineNumber, triggerAbort)\
41 if (!(expression)){\
42 DebugOutputMessage("\n--Debug check triggered--\n");\
43 DebugOutputMessage((filename) << "(" << (lineNumber) << ")\n");\
44 if ((expressionString) != nullptr) DebugOutputMessage("Expression: " << (expressionString) << "\n");\
45 if ((message) != nullptr) DebugOutputMessage("Message: " << (expressionString) << "\n\n");\
46 if ((triggerAbort)) Debug_Break();\
47 }
48
49#else // Define placeholder for non-debug mode
50#define _DebugCheck(expression, expressionString, message, filename, lineNumber, triggerAbort)
51#define Debug_Break()
52#endif
53
54// Define usable macros
55#define RequireSubClass(BaseClass, SubClass) (std::is_base_of<BaseClass, SubClass>::value)
56
57#define Debug_BreakMessage(message) _DebugCheck(false, nullptr, message, __FILE__, __LINE__, true);
58
59#define Debug_CheckMessage(expression, message) _DebugCheck(expression, #expression, message, __FILE__, __LINE__, false);
60#define Debug_Check(expression) Debug_CheckMessage(expression, nullptr);
61
62#define Debug_AssertMessage(expression, message) _DebugCheck(expression, #expression, message, __FILE__, __LINE__, true);
63#define Debug_Assert(expression) Debug_AssertMessage(expression, nullptr);
64
65#define Debug_BuildAssert(expression, message) static_assert(expression, message);