#pragma once #if __cplusplus extern "C" { #endif #include #include #include #include #include typedef int8_t i8; typedef uint8_t u8; typedef int16_t i16; typedef uint16_t u16; typedef int32_t i32; typedef uint32_t u32; typedef int64_t i64; typedef uint64_t u64; typedef float f32; typedef double f64; typedef void* ptr; #if !__cplusplus typedef u8 bool; #define true 1 #define false 0 #endif typedef const char* cstr; #define dbg(N) printf("\e[95m%d\n",N) #define nameof(V) #V #define ARRAY_LEN(A) (sizeof(A)/sizeof(A[0])) #define ALIGN_TO(_SIZE,_ALIGN) (((_SIZE) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) #if defined(_WIN64) || defined(_WIN32) #define IFWIN(YES, NO) YES #else #define IFWIN(YES, NO) NO #endif #define __count_args( \ a0, a1, a2, a3, a4, a5, a6, a7 , a8, a9, a10,a11,a12,a13,a14,a15, \ a16,a17,a18,a19,a20,a21,a22,a23, a24,a25,a26,a27,a28,a29,a30,a31, \ a32,a33,a34,a35,a36,a37,a38,a39, a40,a41,a42,a43,a44,a45,a46,a47, \ a48,a49,a50,a51,a52,a53,a54,a55, a56,a57,a58,a59,a60,a61,a62,a63, \ a64,...) a64 // Macro for counting variadic arguments (max 64) // (see usage in kprint.h) #define count_args(ARGS...) __count_args(ARGS, \ 64,63,62,61,60,59,58,57, 56,55,54,53,52,51,50,49, \ 48,47,46,45,44,43,42,41, 40,39,38,37,36,35,34,33, \ 32,31,30,29,28,27,26,25, 24,23,22,21,20,19,18,17, \ 16,15,14,13,12,11,10,9, 8, 7, 6, 5, 4, 3, 2, 1, 0) #define printfe(FORMAT, ...) fprintf(stderr, FORMAT ,##__VA_ARGS__) /// @warning pointer can be null #define NULLABLE(NAME) NAME #if __cplusplus } #endif