#pragma once #ifdef DEBUG #include #endif enum STAT { STAT_OK, STAT_ERR, STAT_BREAK, STAT_ALREADYEXISTS, }; #define OK( x ) ( (STAT)( x ) == STAT_OK ) typedef char I8; typedef short I16; typedef int I32; typedef long long I64; typedef unsigned char U8; typedef unsigned short U16; typedef unsigned int U32; typedef unsigned long long U64; typedef unsigned long ULONG; typedef float F32; typedef double F64; typedef unsigned long PTR; #define fn( ... ) [&]( __VA_ARGS__ ) #define pfn( ... ) []( __VA_ARGS__ ) template struct __defer_t { T f; __defer_t( T f ) : f( f ) {}; ~__defer_t() { f(); } }; template __defer_t __defer_func( T f ) { return __defer_t( f ); } #define DEFER_1( x, y ) x##y #define DEFER_2( x, y ) DEFER_1( x, y ) #define DEFER_3( x ) DEFER_2( x, __COUNTER__ ) #define defer( code ) auto DEFER_3( _defer_ ) = __defer_func( fn() { code; } ) #ifdef DEBUG #define dlog( ... ) (void)printf( __VA_ARGS__ ) #define ddef( x ) x #else #define dlog( ... ) {} #define ddef( x ) #endif