SPARK
0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
Macros.h
1
#pragma once
2
3
#include "spark/base/Platforms.h"
4
5
#include "spark/log/Logger.h"
6
11
#define SPARK_UNUSED(x) (void)(x)
12
17
#define SPARK_STATIC_UNREACHABLE(TplParam, Message) \
18
static_assert(!std::is_same_v<TplParam, TplParam>, Message)
19
24
#if defined(SPARK_COMPILER_MSVC)
25
#define SPARK_DO_PRAGMA(pragma) __pragma(pragma)
26
#elif defined(SPARK_COMPILER_GCC) || defined(SPARK_COMPILER_CLANG) || defined(SPARK_COMPILER_CLANG_ANALYSER)
27
#define SPARK_DO_PRAGMA(pragma) _Pragma(#pragma)
28
#else
29
#define SPARK_DO_PRAGMA(pragma)
30
#endif
31
35
#if defined(SPARK_COMPILER_MSVC)
36
#define SPARK_WARNING_PUSH SPARK_DO_PRAGMA(warning(push))
37
#define SPARK_WARNING_POP SPARK_DO_PRAGMA(warning(pop))
38
#elif defined(SPARK_COMPILER_GCC)
39
#define SPARK_WARNING_PUSH SPARK_DO_PRAGMA(GCC diagnostic push)
40
#define SPARK_WARNING_POP SPARK_DO_PRAGMA(GCC diagnostic pop)
41
#elif defined(SPARK_COMPILER_CLANG) || defined(SPARK_COMPILER_CLANG_ANALYSER)
42
#define SPARK_WARNING_PUSH SPARK_DO_PRAGMA(clang diagnostic push)
43
#define SPARK_WARNING_POP SPARK_DO_PRAGMA(clang diagnostic pop)
44
#else
45
#define SPARK_WARNING_PUSH
46
#define SPARK_WARNING_POP
47
#endif
48
53
#ifdef SPARK_COMPILER_MSVC
54
#define SPARK_DISABLE_MSVC_WARNING(warningValue) SPARK_DO_PRAGMA(warning(disable: warningValue))
55
#define SPARK_SUPPRESS_MSVC_WARNING(warningValue) SPARK_DO_PRAGMA(warning(suppress: warningValue))
56
#define SPARK_DISABLE_GCC_WARNING(warningValue)
57
#define SPARK_DISABLE_CLANG_WARNING(warningValue)
58
#elif defined(SPARK_COMPILER_GCC)
59
#define SPARK_DISABLE_MSVC_WARNING(warningValue)
60
#define SPARK_SUPPRESS_MSVC_WARNING(warningValue)
61
#define SPARK_DISABLE_GCC_WARNING(warningValue) SPARK_DO_PRAGMA(GCC diagnostic ignored #warningValue)
62
#define SPARK_DISABLE_CLANG_WARNING(warningValue)
63
#elif defined(SPARK_COMPILER_CLANG)
64
#define SPARK_DISABLE_MSVC_WARNING(warningValue)
65
#define SPARK_SUPPRESS_MSVC_WARNING(warningValue)
66
#define SPARK_DISABLE_GCC_WARNING(warningValue)
67
#define SPARK_DISABLE_CLANG_WARNING(warningValue) SPARK_DO_PRAGMA(clang diagnostic ignored #warningValue)
68
#else
69
#define SPARK_DISABLE_MSVC_WARNING(warningValue)
70
#define SPARK_SUPPRESS_MSVC_WARNING(warningValue)
71
#define SPARK_DISABLE_GCC_WARNING(warningValue)
72
#define SPARK_DISABLE_CLANG_WARNING(warningValue)
73
#endif
74
78
#ifdef SPARK_COMPILER_MSVC
79
#define SPARK_DEBUG_BREAK __debugbreak()
80
#elif defined(SPARK_COMPILER_GCC) || defined(SPARK_COMPILER_CLANG)
81
#define SPARK_DEBUG_BREAK __builtin_trap()
82
#else
83
#define SPARK_DEBUG_BREAK
84
#endif
85
90
#define BIT(X) (1 << X)
91
96
#define SPARK_DEFINE_ENUM_FLAGS(T) \
97
inline T operator| (const T lhs, const T rhs) { using _base_t = std::underlying_type_t<T>; return static_cast<T>(static_cast<_base_t>(lhs) | static_cast<_base_t>(rhs)); } \
98
inline T& operator|= (T& lhs, const T& rhs) { lhs = lhs | rhs; return lhs; } \
99
inline T operator& (const T lhs, const T rhs) { using _base_t = std::underlying_type_t<T>; return static_cast<T>(static_cast<_base_t>(lhs) & static_cast<_base_t>(rhs)); } \
100
inline T& operator&= (T& lhs, const T& rhs) { lhs = lhs & rhs; return lhs; }
101
102
#define SPARK_OFFSET_OF(struct, member) ((std::size_t)&reinterpret_cast<char const volatile&>((((struct*)0)->member)))
103
104
/*
105
* Define assertions macros
106
* TODO: Add support for custom assertion handlers
107
* TODO: Add support for custom assertion messages
108
* TODO: Add support for disabling assertions globally
109
*/
110
#define SPARK_CORE_ASSERT(cond) \
111
if (!(cond)) \
112
{ \
113
spark::log::critical("Assertion Failed: {0}", #cond); \
114
SPARK_DEBUG_BREAK; \
115
}
116
117
#define SPARK_ASSERT(cond) \
118
if (!(cond)) \
119
{ \
120
spark::log::critical("Assertion Failed: {0}", #cond); \
121
SPARK_DEBUG_BREAK; \
122
}
sources
spark
base
include
spark
base
Macros.h
Generated by
1.11.0