// vim:fileencoding=utf-8:foldmethod=marker #ifndef MISC_UTILS_H #define MISC_UTILS_H #include "../aliases/aliases.h" #ifdef WAPP_PLATFORM_CPP BEGIN_C_LINKAGE #endif // !WAPP_PLATFORM_CPP #define KB(SIZE) (SIZE * 1024ull) #define MB(SIZE) (KB(SIZE) * 1024) #define GB(SIZE) (MB(SIZE) * 1024) #define TB(SIZE) (GB(SIZE) * 1024) #define wapp_misc_utils_padding_size(SIZE) u8 reserved_padding[sizeof(void *) - ((SIZE) % sizeof(void *))] #define U64_RSHIFT_OR_1(X) (((u64)X) | (((u64)X) >> 1)) #define U64_RSHIFT_OR_2(X) (((u64)X) | (((u64)X) >> 2)) #define U64_RSHIFT_OR_4(X) (((u64)X) | (((u64)X) >> 4)) #define U64_RSHIFT_OR_8(X) (((u64)X) | (((u64)X) >> 8)) #define U64_RSHIFT_OR_16(X) (((u64)X) | (((u64)X) >> 16)) #define U64_RSHIFT_OR_32(X) (((u64)X) | (((u64)X) >> 32)) #define wapp_misc_utils_u64_round_up_pow2(X) ( \ ( \ U64_RSHIFT_OR_32( \ U64_RSHIFT_OR_16( \ U64_RSHIFT_OR_8( \ U64_RSHIFT_OR_4( \ U64_RSHIFT_OR_2( \ U64_RSHIFT_OR_1(X - 1) \ ) \ ) \ ) \ ) \ ) \ ) + 1 \ ) #ifdef WAPP_PLATFORM_CPP #define wapp_misc_utils_va_args_count(T, ...) va_args_count(__VA_ARGS__) #else #define wapp_misc_utils_va_args_count(T, ...) (sizeof((T[]){__VA_ARGS__})/sizeof(T)) #endif // !WAPP_PLATFORM_CPP #ifdef WAPP_PLATFORM_CPP END_C_LINKAGE template constexpr u64 va_args_count(Args&&...) { return sizeof...(Args); } #endif // !WAPP_PLATFORM_CPP #endif // !MISC_UTILS_H