31#if __has_include(<x86intrin.h>)
33#elif __has_include(<intrin.h>)
38#if defined __STDC_VERSION__ && __STDC_VERSION__ < 202311l
44#define LIBHATCHET_VER 14904
47#define LIBHATCHET_TAG "v1.49.4"
49#if !defined HX_HARDENING_MODE
51#define HX_HARDENING_MODE HX_HARDENING_MODE_DEBUG
55#define HX_HARDENING_MODE_NONE 0
58#define HX_HARDENING_MODE_STANDARD 1
61#define HX_HARDENING_MODE_VERBOSE 2
64#define HX_HARDENING_MODE_DEBUG 3
67#if (HX_HARDENING_MODE) < 0 || (HX_HARDENING_MODE) > 3
68#error HX_HARDENING_MODE must be [0..3]. See <hx/hxsettings.h>.
72#if !(HX_USE_MACROS_WITH_MODULE)
81#define hxinit() (void)(hxg_init_ver_ == LIBHATCHET_VER || (hxinit_internal(LIBHATCHET_VER), 0))
83#if (HX_HARDENING_MODE) == HX_HARDENING_MODE_DEBUG
90#define hxassert(x_) (void)((bool)(x_) \
91 || (hxlog_handler_(hxlog_level_assert, #x_), hxassert_handler(__FILE__, __LINE__)) \
101#define hxassertmsg(x_, ...) (void)((bool)(x_) \
102 || (hxlog_handler_(hxlog_level_assert, __VA_ARGS__), hxassert_handler(__FILE__, __LINE__)) \
111#define hxassert_hard(x_, ...) (void)((bool)(x_) \
112 || (hxlog_handler_(hxlog_level_assert, __VA_ARGS__), hxassert_handler(__FILE__, __LINE__)) \
121#define hxassert_always(x_, ...) (void)((bool)(x_) \
122 || (hxlog_handler_(hxlog_level_assert, __VA_ARGS__), hxassert_handler(__FILE__, __LINE__)) \
126#define hxassertmsg(x_, ...) ((void)0)
127#define hxassert(x_) ((void)0)
128#define hxassert_always(x_, ...) (void)((bool)(x_) \
129 || (hxassert_handler(), 0))
133#if (HX_USE_LOGGING) > 1
137#define hxlog(...) hxlog_handler(hxlog_level_log, __VA_ARGS__)
139#define hxlog(...) ((void)0)
146#define hxlog_release(...) hxlog_handler(hxlog_level_log, __VA_ARGS__)
150#define hxlog_console(...) hxlog_handler(hxlog_level_console, __VA_ARGS__)
154#define hxlog_warning(...) hxlog_handler(hxlog_level_warning, __VA_ARGS__)
160#define hxwarn_msg(x_, ...) (void)((bool)(x_) \
161 || (hxlog_handler(hxlog_level_warning, __VA_ARGS__), 0))
164#define hxlog_release(...) ((void)0)
165#define hxlog_console(...) ((void)0)
166#define hxlog_warning(...) ((void)0)
167#define hxwarn_msg(x_, ...) ((void)0)
172#if (HX_HARDENING_MODE) == HX_HARDENING_MODE_VERBOSE
173#define hxassert_hard(x_, ...) (void)((bool)(x_) \
174 || (hxlog_handler_(hxlog_level_assert, __VA_ARGS__), \
175 hxassert_handler(), 0))
176#elif (HX_HARDENING_MODE) == HX_HARDENING_MODE_STANDARD
177#define hxassert_hard(x_, ...) (void)((bool)(x_) \
178 || (hxassert_handler(), 0))
179#elif (HX_HARDENING_MODE) == HX_HARDENING_MODE_NONE
180#define hxassert_hard(x_, ...) ((void)0)
183#if !(HX_USE_MACROS_WITH_MODULE)
223extern int hxg_init_ver_;
230#if (HX_HARDENING_MODE) == HX_HARDENING_MODE_DEBUG
280#if !(HX_USE_MACROS_WITH_MODULE)
292#define hxhash_bits 32u
293#define hxnull_handle 0u
294#define hxsizeof(x) (hxsize_t)sizeof(x)
299#if HX_CPLUSPLUS >= 202302L
300#if !(HX_USE_MACROS_WITH_MODULE)
306 va_start(args_, format_);
314#define hxlog_handler_ hxlog_handler
Memory Manager C/C++ API.
Compiler detection and target specific C++ feature polyfill.
#define hxattr_noreturn
hxattr_noreturn - Indicates that a function will never return.
Definition hxsettings.h:104
#define hxattr_noexcept
hxattr_noexcept - Use gcc/clang nothrow attribute.
Definition hxsettings.h:93
#define hxinline_constexpr
hxinline_constexpr - Enables C++17 compatable "inline constexpr" usage for variables so they can be e...
Definition hxsettings.h:272
#define hxattr_printf(...)
hxattr_printf - Indicates to gcc that a function uses printf-style formatting so it can type-check th...
Definition hxsettings.h:108
#define hxattr_nonnull(...)
hxattr_nonnull - Indicates that a function has args that should not be null.
Definition hxsettings.h:97
#define hxattr_cold
hxattr_cold - Optimize a function for size.
Definition hxsettings.h:78
hxlog_level_t
hxlog_level_t - Runtime setting for verbosity of log messages.
Definition libhatchet.h:191
@ hxlog_level_warning
hxlog_level_warning - Written to hxerr.
Definition libhatchet.h:201
@ hxlog_level_console
hxlog_level_console - Written to hxerr.
Definition libhatchet.h:198
@ hxlog_level_log
hxlog_level_log - Written to hxout.
Definition libhatchet.h:194
@ hxlog_level_assert
hxlog_level_assert - Written to hxerr.
Definition libhatchet.h:204
constexpr hxhash_t hxhash_bits
hxhash_bits - Number of bits in hxhash_t.
Definition libhatchet.h:282
bool hxassert_handler(const char *file_, size_t line_)
hxassert_handler - Assert handler.
void hxlog_handler(enum hxlog_level_t level_, const char *format_,...)
hxlog_handler - Enters formatted messages in the system log.
constexpr hxhandle_t hxnull_handle
hxnull_handle - A handle that will never refer to a valid object.
Definition libhatchet.h:285
void hxlog_handler_v(enum hxlog_level_t level_, const char *format_, va_list args_)
hxlog_handler_v - A va_list version of hxlog_handler.
constexpr hxsize_t hxsizeof(void)
hxsizeof - Returns the size of a type or expression as hxsize_t.
Definition libhatchet.h:288
void hxexit(int status_)
hxexit(int status) - Flushes hxout and hxerr then calls _Exit.
void hxinit_internal(int version_)
hxinit_internal - Internal. Use hxinit instead. It checks hxg_init_ver_.
uint32_t hxhash_t
hxhash_t - Unsigned 32-bit hash value. Expect collisions.
Definition libhatchet.h:212
uint64_t hxhandle_t
hxhandle_t - An opaque 64-bit handle.
Definition libhatchet.h:215
void hxset_assert_handler(bool(*handler_)(void))
hxset_assert_handler - Installs a custom handler called when an assertion fails.
void hxshutdown(void)
hxshutdown - Terminates service.
ptrdiff_t hxsize_t
hxsize_t - A signed size type, same as ssize_t or ptrdiff_t.
Definition libhatchet.h:209