blob: 4a2862440bb166b881216edb2cb81595fa2dec1b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#pragma once
#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)printf( __VA_ARGS__ )
#define ddef( x ) x
#else
#define dlog( ... ) {}
#define ddef( x )
#endif
|