#pragma once #include #include using I8 = int8_t; using U8 = uint8_t; using I16 = int16_t; using U16 = uint16_t; using I32 = int32_t; using U32 = uint32_t; using I64 = int64_t; using U64 = uint64_t; using ISize = ssize_t; using USize = size_t; using F32 = float; using F64 = double; using Bool = bool; using Char = char; using UInt = USize; using Int = ISize; using Real = F64; #define ASSERT_SIZE(type, bytes) \ static_assert(sizeof(type) == (bytes), "Type '" #type "' should be exactly " #bytes " bytes.") ASSERT_SIZE(I8, 1); ASSERT_SIZE(U8, 1); ASSERT_SIZE(I16, 2); ASSERT_SIZE(U16, 2); ASSERT_SIZE(I32, 4); ASSERT_SIZE(U32, 4); ASSERT_SIZE(I64, 8); ASSERT_SIZE(U64, 8); ASSERT_SIZE(F32, 4); ASSERT_SIZE(F64, 8); ASSERT_SIZE(Bool, 1); // MinGW doesn't define uint that I like to use // in template definitions, so we need to define it here. #ifdef __MINGW32__ #define uint uint32_t #endif