38#ifndef UTILS_MACROS_H_1982D373_8862_4453_ADFB_33AECC853E48
39#define UTILS_MACROS_H_1982D373_8862_4453_ADFB_33AECC853E48
47#define MERGE(a,b) a##b
48#define STRINGIFY(A) #A
49#define TOSTRING(A) STRINGIFY(A)
51#define IF_NOT_NULL_ELSE(val, default_val) ((val) ? (val) : (default_val))
53#define IF_NOT_UNDEF_ELSE(val, default_val) ((val) != UNDEF ? (val) : (default_val))
55#define DIV_ROUNDED_UP(value, div) ((((value) % (div)) != 0) ? ((value) / (div) + 1) : ((value) / (div)))
57#define SWAP(a, b) do { b ^= a; a ^= b; b ^= a; } while (0)
58#define SWAP_PTR(a, b) do { void *tmp = (a); (a) = (b); (b) = tmp; } while(0)
60#define ARR_COUNT(arr) (sizeof (arr) / sizeof (arr)[0])
63#define MIN(a,b) (((a)<(b))?(a):(b))
65#define MAX(a,b) (((a)>(b))?(a):(b))
67#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
71#define EXTERN_C extern "C"
78#define UG_ASSERT(cond) \
82 "%s:%d: %s: Assertion `" #cond "' failed.\n", \
83 __FILE__, __LINE__, __func__); \
90#define UG_ASSERT_NO_FATAL(cond) \
94 "%s:%d: %s: Assertion `" #cond "' failed.\n", \
95 __FILE__, __LINE__, __func__); \
96 handle_error(EXIT_FAILURE); \
101#define snprintf_ch(str, ...) snprintf(str, sizeof str, __VA_ARGS__)
102#define STARTS_WITH(str, token) !strncmp(str, token, strlen(token))
111#ifdef WORDS_BIGENDIAN
112#define to_fourcc(a,b,c,d) (((uint32_t)(d)) | ((uint32_t)(c)<<8U) | ((uint32_t)(b)<<16U) | ((uint32_t)(a)<<24U))
114#define to_fourcc(a,b,c,d) (((uint32_t)(a)) | ((uint32_t)(b)<<8U) | ((uint32_t)(c)<<16U) | ((uint32_t)(d)<<24U))
116#define IS_FCC(val) (isprint((val) >> 24U & 0xFFU) && isprint((val) >> 16U & 0xFFU) && isprint((val) >> 8U & 0xFFU) && isprint((val) & 0xFFU))
123#define OPTIMIZED_FOR _Pragma("clang loop vectorize(assume_safety) interleave(enable)") __NL__ for
124#elif defined __GNUC__
125#define OPTIMIZED_FOR _Pragma("GCC ivdep") __NL__ for
127#define OPTIMIZED_FOR for
138#define IS_KEY_PREFIX(tok, key) \
139 (strchr((tok), '=') != 0 && \
140 strncmp(key, tok, strchr((tok), '=') - (tok)) == 0)
142#define IS_PREFIX(tok, key) \
143 (IS_KEY_PREFIX(tok, key) || strncmp(tok, key, strlen(tok)) == 0)
@ MAX_CPU_CORES
maximal expected CPU core count
@ STR_LEN
"standard" string length placeholder