14#include <lagrange/api.h>
15#include <lagrange/utils/fmt/format.h>
101 const char* function,
104 const char* condition,
105 std::string_view message);
115#define LA_INTERNAL_EXPAND(x) x
117#define LA_INTERNAL_NARG2(...) \
118 LA_INTERNAL_EXPAND(LA_INTERNAL_NARG1(__VA_ARGS__, LA_INTERNAL_RSEQN()))
119#define LA_INTERNAL_NARG1(...) LA_INTERNAL_EXPAND(LA_INTERNAL_ARGSN(__VA_ARGS__))
120#define LA_INTERNAL_ARGSN(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
121#define LA_INTERNAL_RSEQN() 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
123#define LA_INTERNAL_FUNC2(name, n) name##n
124#define LA_INTERNAL_FUNC1(name, n) LA_INTERNAL_FUNC2(name, n)
126#define LA_INTERNAL_GET_MACRO(func, ...) \
127 LA_INTERNAL_EXPAND( \
128 LA_INTERNAL_FUNC1(func, LA_INTERNAL_EXPAND(LA_INTERNAL_NARG2(__VA_ARGS__)))(__VA_ARGS__))
132#if defined(__GNUC__) || defined(__clang__)
133 #define LA_ASSERT_FUNCTION __PRETTY_FUNCTION__
134#elif defined(_MSC_VER)
135 #define LA_ASSERT_FUNCTION __FUNCSIG__
136#elif defined(__SUNPRO_CC)
137 #define LA_ASSERT_FUNCTION __func__
139 #define LA_ASSERT_FUNCTION __FUNCTION__
147#define LA_INTERNAL_ASSERT_ARGS_2(condition, message) \
148 ((void)(!static_cast<bool>((condition)) && ::lagrange::assertion_failed( \
149 LA_ASSERT_FUNCTION, \
154#define LA_INTERNAL_ASSERT_ARGS_1(condition) LA_INTERNAL_ASSERT_ARGS_2(condition, "")
156#define LA_INTERNAL_IGNORE_ARGS_2(condition, message) ((void)(0))
157#define LA_INTERNAL_IGNORE_ARGS_1(condition) LA_INTERNAL_IGNORE_ARGS_2(condition, "")
174#ifndef la_runtime_assert
175 #define la_runtime_assert(...) \
176 LA_INTERNAL_EXPAND(LA_INTERNAL_GET_MACRO(LA_INTERNAL_ASSERT_ARGS_, __VA_ARGS__))
190#ifndef la_debug_assert
192 #define la_debug_assert(...) \
193 LA_INTERNAL_EXPAND(LA_INTERNAL_GET_MACRO(LA_INTERNAL_IGNORE_ARGS_, __VA_ARGS__))
195 #define la_debug_assert(...) \
196 LA_INTERNAL_EXPAND(LA_INTERNAL_GET_MACRO(LA_INTERNAL_ASSERT_ARGS_, __VA_ARGS__))
LA_CORE_API bool assertion_failed(const char *function, const char *file, unsigned int line, const char *condition, std::string_view message)
Definition assert.cpp:74
LA_CORE_API void trigger_breakpoint()
Call to explicitly trigger a debugger breakpoint.
Definition assert.cpp:66
LA_CORE_API bool is_breakpoint_enabled()
Returns whether to trigger a debugger breakpoint on assert failure.
Definition assert.cpp:61
LA_CORE_API void set_breakpoint_enabled(bool enabled)
Sets whether to trigger a debugger breakpoint on assert failure.
Definition assert.cpp:56
Main namespace for Lagrange.