summaryrefslogtreecommitdiff
path: root/src/typedef.h
diff options
context:
space:
mode:
authoraura <nw@moneybot.cc>2026-07-13 10:15:03 +0200
committeraura <nw@moneybot.cc>2026-07-13 10:15:03 +0200
commit57d172df4db1451ba3caeeb0ca485d0845a61912 (patch)
treead0be7c8bec79a1eb58b25f2a631bc4b6809e7fd /src/typedef.h
push source
Diffstat (limited to 'src/typedef.h')
-rw-r--r--src/typedef.h64
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