57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
// 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<T>(__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 <typename T, typename... Args>
|
|
constexpr u64 va_args_count(Args&&...) {
|
|
return sizeof...(Args);
|
|
}
|
|
#endif // !WAPP_PLATFORM_CPP
|
|
|
|
#endif // !MISC_UTILS_H
|