p2p/stingray_sdk/plugin_foundation/assert.h
Lucas Schwiderski 2c9ce46dd2
chore: Rework project structure
There likely won't be much need for multiple separate crates.
2023-05-26 23:42:01 +02:00

38 lines
1.1 KiB
C++

#pragma once
#include <assert.h>
#include "../engine_plugin_api/plugin_api.h"
#if defined(DEVELOPMENT)
namespace stingray_plugin_foundation {
inline struct ErrorApi *&error_api()
{
static struct ErrorApi *api = nullptr;
return api;
}
inline void set_error_api(struct ErrorApi *api)
{
error_api() = api;
}
}
#define XASSERT_BASE(test, test_msg, ...) \
do {if (!(test)) { \
struct ErrorApi *api = stingray_plugin_foundation::error_api(); \
if (api && api->report_assert_failure) \
api->report_assert_failure(__LINE__, __FILE__, test_msg, api->eprintf(__VA_ARGS__)); \
else \
assert(test); \
}} while (0)
#define XASSERT(test, ...) do {XASSERT_BASE(test, #test, __VA_ARGS__);} while(0)
#define XENSURE(test) do {XASSERT_BASE(test, #test, "Assertion failed");} while(0)
#define XERROR(...) do {XASSERT_BASE(false, nullptr, __VA_ARGS__);} while(0)
#else
#define XASSERT(test, ...) ((void)0)
#define XENSURE(test) ((void)0)
#define XERROR(...) ((void)0)
namespace stingray_plugin_foundation {
inline void set_error_api(struct ErrorApi *api) {}
}
#endif