#pragma once // ------------------------------------------------------------------------ // Freestanding headers #include #include #include #include #include #include // ------------------------------------------------------------------------ // Modern type aliases typedef char byte; typedef unsigned char ubyte, uchar; typedef signed char sbyte, schar; typedef unsigned short ushort; typedef signed short sshort; typedef unsigned int uint; typedef signed int sint; typedef unsigned long ulong; typedef signed long slong; typedef unsigned long ulong; typedef signed long slong; typedef long long vlong; typedef unsigned long long uvlong; typedef signed long long svlong; typedef uint8_t uint8; typedef uint16_t uint16; typedef uint32_t uint32; typedef uint64_t uint64; typedef int8_t int8; typedef int16_t int16; typedef int32_t int32; typedef int64_t int64; typedef float float32; typedef double float64; typedef uintptr_t uintptr; typedef intptr_t intptr; typedef int error; #define nil NULL // ------------------------------------------------------------------ // Global macros #define arrlen(Array) (sizeof(Array) / sizeof((Array)[0])) #define arrend(Array) ((Array) + arrlen(Array)) #define MAX(x, y) (((x) > (y)) ? (x) : (y)) #define MIN(x, y) (((x) < (y)) ? (x) : (y)) #define CLAMP(x, lo, hi) (((x) < (lo)) ? (lo) : (((x) > (hi)) ? (hi) : (x)))