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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#pragma once
#include <bits.h>
// ------------------------------------------------------------------------
// types
/* useful aliases */
typedef char byte;
typedef signed char schar, sbyte;
typedef unsigned char uchar, ubyte;
typedef signed short sshort;
typedef unsigned short ushort;
typedef signed int sint;
typedef unsigned int uint;
typedef signed long slong;
typedef unsigned long ulong;
typedef long long vlong;
typedef unsigned long long uvlong;
typedef signed long long svlong;
typedef _Bool bool;
/* fixed width */
typedef signed INT8 int8;
typedef signed INT16 int16;
typedef signed INT32 int32;
typedef signed INT64 int64;
typedef unsigned INT8 uint8;
typedef unsigned INT16 uint16;
typedef unsigned INT32 uint32;
typedef unsigned INT64 uint64;
typedef uint32 rune;
/* pointer address */
typedef ADDR intptr;
typedef unsigned ADDR uintptr;
#undef INT8
#undef INT16
#undef INT32
#undef INT64
#undef ADDR
// ------------------------------------------------------------------
// global constants
#define true 1
#define false 0
#define nil ((void*)0)
/* limits */
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 255
#if '\xff' > 0
# define CHAR_MIN 0
# define CHAR_MAX UCHAR_MAX
#else
# define CHAR_MIN SCHAR_MIN
# define CHAR_MAX SCHAR_MAX
#endif
#define SHRT_MIN (-1-0x7fff)
#define SHRT_MAX 0x7fff
#define USHRT_MAX 0xffff
#define INT_MIN (-1-0x7fffffff)
#define INT_MAX 0x7fffffff
#define UINT_MAX 0xffffffffU
#define LONG_MIN (-LONG_MAX-1)
#define ULONG_MAX (2UL*LONG_MAX+1)
#define LLONG_MIN (-LLONG_MAX-1)
#define LLONG_MAX 0x7fffffffffffffffLL
#define ULLONG_MAX (2ULL*LLONG_MAX+1)
#define INT8_MIN (-1-0x7f)
#define INT16_MIN (-1-0x7fff)
#define INT32_MIN (-1-0x7fffffff)
#define INT64_MIN (-1-0x7fffffffffffffff)
#define INT8_MAX (0x7f)
#define INT16_MAX (0x7fff)
#define INT32_MAX (0x7fffffff)
#define INT64_MAX (0x7fffffffffffffff)
#define UINT8_MAX (0xff)
#define UINT16_MAX (0xffff)
#define UINT32_MAX (0xffffffffu)
#define UINT64_MAX (0xffffffffffffffffu)
#define PATH_MAX 4096
// ------------------------------------------------------------------
// global macros
/* offsets */
#define offsetof(t, d) __builtin_offsetof(t, d)
/* variable arguments */
#define va_start(v,a) __builtin_va_start(v,a)
#define va_end(v) __builtin_va_end(v)
#define va_arg(v,t) __builtin_va_arg(v,t)
#define va_copy(d,s) __builtin_va_copy(d,s)
/* array helpers */
#define arrlen(Array) (sizeof(Array) / sizeof((Array)[0]))
#define arrend(Array) ((Array) + arrlen(Array))
/* simple thresholding */
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#define CLAMP(x, lo, hi) (((x) < (lo)) ? (lo) : (((x) > (hi)) ? (hi) : (x)))
|