diff options
| author | aura <nw@moneybot.cc> | 2026-07-13 10:15:03 +0200 |
|---|---|---|
| committer | aura <nw@moneybot.cc> | 2026-07-13 10:15:03 +0200 |
| commit | 57d172df4db1451ba3caeeb0ca485d0845a61912 (patch) | |
| tree | ad0be7c8bec79a1eb58b25f2a631bc4b6809e7fd /src/typedef.h | |
push source
Diffstat (limited to 'src/typedef.h')
| -rw-r--r-- | src/typedef.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/typedef.h b/src/typedef.h new file mode 100644 index 0000000..0bff722 --- /dev/null +++ b/src/typedef.h @@ -0,0 +1,64 @@ +#pragma once + +#define DEBUG +#ifdef DEBUG +#include <stdio.h> +#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; + +// lambda macro - captures all by ref +#define fn( ... ) [&]( __VA_ARGS__ ) +// lambda macro - captures all by copy +#define cfn( ... ) [=]( __VA_ARGS__ ) +// lambda macro - raw pointer func +#define pfn( ... ) []( __VA_ARGS__ ) + +template <typename T> +struct __defer_t { + T f; + __defer_t( T f ) : f( f ) {}; + ~__defer_t() { f(); } +}; + +template <typename T> +__defer_t<T> __defer_func( T f ) { + return __defer_t<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)fprintf( stderr, __VA_ARGS__ ) +#define ddef( x ) x +#else +#define dlog( ... ) (void)0 +#define ddef( x ) +#endif |
