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
121
122
|
#ifndef __utility_h__
#define __utility_h__
#include <stddef.h>
/**********************************************************/
/* This object contain some useful functions, constants */
/* and types. */
/* Enums: */
/* ErrorType contain kinds of errors. */
/* */
/* Structures: */
/* */
/* Types: */
/* uint unsigned int */
/* pchar char* */
/* ppchar char** */
/* pvoid void* */
/* ppvoid void** */
/* cchar const char */
/* pcchar (const char)* */
/* ppcchar (const char)** */
/* cvoid const void */
/* pcvoid (cosnt void)* */
/* ppcvoid (const void)** */
/* ... etc */
/* */
/* Type transform: */
/* Char(), pChar(), ppChar() */
/* Void(), pVoid(), ppVoid() */
/* cChar(), pcChar(), ppcChar() */
/* cVoid(), pcVoid(), ppcVoid() */
/* ... etc */
/* */
/* Functions: */
/* ctl_malloc like malloc(), but will exit on error */
/* ctl_realloc like realloc(), but will exit on erro */
/* ctl_free like free(), but will return NULL */
/* ctl_die print some message and exit() */
/* ctl_swap swap two elements with given type */
/* ctl_max return the max of the two arguments */
/* ctl_min return the min of the two arguments */
/* */
/**********************************************************/
typedef enum{
CTL_MEMORY = 0x01,
CTL_USER = 0x02
} CtlErrorType;
// int
typedef int* pint;
typedef unsigned int uint;
typedef uint* puint;
typedef const int cint;
typedef cint* pcint;
typedef const uint cuint;
typedef cuint* pcuint;
#define Int(X) (( int)(X))
#define pInt(X) (( pint)(X))
#define uInt(X) (( uint)(X))
#define puInt(X) (( puint)(X))
#define cInt(X) (( cint)(X))
#define pcInt(X) (( pcint)(X))
#define cuInt(X) (( cuint)(X))
#define pcuInt(X) ((pcuint)(X))
// void
typedef void* pvoid;
typedef pvoid* ppvoid;
typedef const void cvoid;
typedef cvoid* pcvoid;
typedef pcvoid* ppcvoid;
#define Void(X) (( void)(X))
#define pVoid(X) (( pvoid)(X))
#define ppVoid(X) (( ppvoid)(X))
#define cVoid(X) (( cvoid)(X))
#define pcVoid(X) (( pcvoid)(X))
#define ppcVoid(X) ((ppcvoid)(X))
// char
typedef char* pchar;
typedef pchar* ppchar;
typedef unsigned char uchar;
typedef uchar* puchar;
typedef puchar* ppuchar;
typedef const char cchar;
typedef cchar* pcchar;
typedef pcchar* ppcchar;
typedef const uchar cuchar;
typedef cuchar* pcuchar;
typedef pcuchar* ppcuchar;
#define Char(X) (( char)(X))
#define pChar(X) (( pchar)(X))
#define ppChar(X) (( ppchar)(X))
#define uChar(X) (( uchar)(X))
#define puChar(X) (( puchar)(X))
#define ppuChar(X) (( ppuchar)(X))
#define cChar(X) (( cchar)(X))
#define pcChar(X) (( pcchar)(X))
#define ppcChar(X) (( ppcchar)(X))
#define cuChar(X) (( cuchar)(X))
#define pcuChar(X) (( pcuchar)(X))
#define ppcuChar(X) ((ppcuchar)(X))
//
typedef int (*ctl_cmp_func)(pcvoid,pcvoid);
#define ctl_priv static inline
pvoid ctl_malloc (size_t size);
pvoid ctl_realloc(pvoid ptr, size_t size);
pvoid ctl_free (pvoid ptr);
void ctl_die (CtlErrorType e);
int ctl_strcmpL(pcchar a, pcchar b);
#define ctl_swap(X,Y,Z) do{X zzzztmp=(Y);(Y)=(Z);(Z)=zzzztmp;}while(0)
#define ctl_max(X,Y) ((X) > (Y) ? (X) : (Y))
#define ctl_min(X,Y) ((X) < (Y) ? (X) : (Y))
#endif /* __utility_h__ */
|