stdex
Additional custom or not Standard C++ covered algorithms
Loading...
Searching...
No Matches
assert.hpp
1/*
2 SPDX-License-Identifier: MIT
3 Copyright © 2023-2024 Amebis
4*/
5
6#pragma once
7
8#include "compat.hpp"
9#include <assert.h>
10#include <stdint.h>
11#include <stdlib.h>
12
13#ifdef NDEBUG
14#define stdex_assert(e) _Analysis_assume_(e)
15#define stdex_verify(e) ((void)(e))
16#else
17#if defined(_WIN32)
18#define stdex_assert(e) (!!(e) ? (void)0 : stdex::do_assert(_L(__FILE__), (unsigned)(__LINE__), _L(#e)))
19#elif defined(__APPLE__)
20#define stdex_assert(e) (!!(e) ? (void)0 : stdex::do_assert(__func__, __ASSERT_FILE_NAME, __LINE__, #e))
21#else
22#error Implement!
23#endif
24#define stdex_verify(e) stdex_assert(e)
25#endif
26
27namespace stdex
28{
37 _NoReturn_
38 inline void abort(uint32_t exception_code)
39 {
40#ifdef _WIN32
41 RaiseException(exception_code, EXCEPTION_NONCONTINUABLE, 0, NULL);
42#else
43 _Unreferenced_(exception_code);
44 ::abort();
45#endif
46 }
47
49#if defined(_WIN32)
50 inline void do_assert(const wchar_t *file, unsigned line, const wchar_t *expression)
51 {
52 _wassert(expression, file, line);
53 }
54#elif defined(__APPLE__)
55 inline void do_assert(const char *function, const char *file, int line, const char *expression)
56 {
57 __assert_rtn(function, file, line, expression);
58 }
59#else
60#error Implement!
61#endif
63}