fennec
Loading...
Searching...
No Matches
assert.h
Go to the documentation of this file.
1// =====================================================================================================================
2// fennec, a free and open source game engine
3// Copyright © 2025 Medusa Slockbower
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <https://www.gnu.org/licenses/>.
17// =====================================================================================================================
18
30
31#ifndef FENNEC_LANG_ASSERT_H
32#define FENNEC_LANG_ASSERT_H
33
66
67#if FENNEC_COMPILER_MSVC
68#define __PRETTY_FUNCTION__ __FUNCSIG__
69#endif
70
71using assert_handler = void (*)(const char *, const char *, int , const char *);
72
73void _assert_impl(const char* expression, const char* file, int line, const char* function, const char* desc, bool halt);
74
75// flagged unlikely to optimize branch prediction
76#define assert(expression, description) \
77 if(not(expression)) [[unlikely]] { \
78 _assert_impl(#expression, __FILE__, __LINE__, __PRETTY_FUNCTION__, description, not FENNEC_RELEASE); \
79 }
80
81#define assertf(expression, description) \
82 if(not(expression)) [[unlikely]] { \
83 _assert_impl(#expression, __FILE__, __LINE__, __PRETTY_FUNCTION__, description, true); \
84 }
85
86#if FENNEC_RELEASE
87#define assertd(expression, description)
88#else
89#define assertd(expression, description) assert(expression, description)
90#endif
91
92#endif // FENNEC_LANG_ASSERT_H