8685f3d1dd
Bigfoot / Build & Test Debug with ./ConanProfiles/clang (Unity Build: OFF) (push) Successful in 5m48s
Bigfoot / Build & Test Debug with ./ConanProfiles/clang (Unity Build: ON) (push) Successful in 5m32s
Bigfoot / Build & Test Debug with ./ConanProfiles/clang_asan (Unity Build: OFF) (push) Successful in 6m17s
Bigfoot / Build & Test Debug with ./ConanProfiles/clang_asan (Unity Build: ON) (push) Successful in 6m14s
Bigfoot / Build & Test RelWithDebInfo with ./ConanProfiles/clang (Unity Build: OFF) (push) Successful in 6m20s
Bigfoot / Build & Test RelWithDebInfo with ./ConanProfiles/clang (Unity Build: ON) (push) Successful in 6m21s
Bigfoot / Build & Test RelWithDebInfo with ./ConanProfiles/clang_asan (Unity Build: OFF) (push) Successful in 7m50s
Bigfoot / Build & Test RelWithDebInfo with ./ConanProfiles/clang_asan (Unity Build: ON) (push) Successful in 7m49s
Bigfoot / Build & Test Release with ./ConanProfiles/clang (Unity Build: OFF) (push) Successful in 6m20s
Bigfoot / Build & Test Release with ./ConanProfiles/clang (Unity Build: ON) (push) Successful in 6m24s
Bigfoot / Build & Test Release with ./ConanProfiles/clang_asan (Unity Build: OFF) (push) Successful in 7m34s
Bigfoot / Build & Test Release with ./ConanProfiles/clang_asan (Unity Build: ON) (push) Successful in 7m23s
Bigfoot / Clang Format Checks (push) Successful in 2m0s
80 lines
5.5 KiB
C++
80 lines
5.5 KiB
C++
/*********************************************************************
|
|
* \file Assert.hpp
|
|
*
|
|
* \author Romain BOULLARD
|
|
* \date October 2025
|
|
*********************************************************************/
|
|
#ifndef BIGFOOT_UTILS_ASSERT_HPP
|
|
#define BIGFOOT_UTILS_ASSERT_HPP
|
|
#include <Utils/Log/LogMacros.hpp>
|
|
|
|
#if defined BIGFOOT_NOT_OPTIMIZED
|
|
|
|
#include <source_location>
|
|
#include <string>
|
|
|
|
#if defined BIGFOOT_LINUX
|
|
#include <csignal>
|
|
#endif
|
|
|
|
#if defined BIGFOOT_WINDOWS
|
|
#define BREAK \
|
|
do \
|
|
{ \
|
|
__debugbreak(); \
|
|
} while (false)
|
|
#elif defined BIGFOOT_LINUX
|
|
#define BREAK \
|
|
do \
|
|
{ \
|
|
std::raise(SIGTRAP); \
|
|
} while (false)
|
|
#endif
|
|
|
|
#define ASSERT(HANDLER, p_assert, p_message, ...) \
|
|
do \
|
|
{ \
|
|
constexpr std::source_location location = std::source_location::current(); \
|
|
if (!(p_assert)) [[unlikely]] \
|
|
{ \
|
|
HANDLER::Handle(location, p_message __VA_OPT__(, ) __VA_ARGS__); \
|
|
BREAK; \
|
|
} \
|
|
} while (false)
|
|
|
|
#define SOFT_ASSERT(HANDLER, p_assert, p_message, ...) \
|
|
do \
|
|
{ \
|
|
constexpr std::source_location location = std::source_location::current(); \
|
|
if (!(p_assert)) [[unlikely]] \
|
|
{ \
|
|
HANDLER::Handle(location, p_message __VA_OPT__(, ) __VA_ARGS__); \
|
|
BREAK; \
|
|
} \
|
|
} while (false)
|
|
|
|
#define CRITICAL_ASSERT(HANDLER, p_assert, p_message, ...) \
|
|
do \
|
|
{ \
|
|
constexpr std::source_location location = std::source_location::current(); \
|
|
if (!(p_assert)) [[unlikely]] \
|
|
{ \
|
|
HANDLER::Handle(location, p_message __VA_OPT__(, ) __VA_ARGS__); \
|
|
if (Bigfoot::Singleton<Bigfoot::Log>::HasInstance()) \
|
|
{ \
|
|
Bigfoot::Singleton<Bigfoot::Log>::GetInstance().Flush(); \
|
|
} \
|
|
BREAK; \
|
|
std::abort(); \
|
|
} \
|
|
} while (false)
|
|
|
|
#else
|
|
#define ASSERT(HANDLER, p_assert, p_message, ...)
|
|
|
|
#define SOFT_ASSERT(HANDLER, p_assert, p_message, ...)
|
|
|
|
#define CRITICAL_ASSERT(HANDLER, p_assert, p_message, ...)
|
|
#endif
|
|
#endif
|