summaryrefslogtreecommitdiff
path: root/src/util/typedef.h
blob: 53c40104ffb214ad8cf355c2d2a4ad7576ed77cc (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
#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;

#define fn( ... ) [&]( __VA_ARGS__ )
#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