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 #ifndef UCX_ALLOCATOR_H
34 #define UCX_ALLOCATOR_H
35
36 #include "common.h"
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42
43
44
45 typedef struct {
46
47
48
49 void *(*malloc)(
50 void *data,
51 size_t n
52 );
53
54
55
56
57 __attribute__((__warn_unused_result__))
58 void *(*realloc)(
59 void *data,
60 void *mem,
61 size_t n
62 );
63
64
65
66
67 void *(*calloc)(
68 void *data,
69 size_t nelem,
70 size_t n
71 );
72
73
74
75
76 __attribute__((__nonnull__))
77 void (*free)(
78 void *data,
79 void *mem
80 );
81 } cx_allocator_class;
82
83
84
85
86 struct cx_allocator_s {
87
88
89
90 cx_allocator_class *cl;
91
92
93
94 void *data;
95 };
96
97
98
99
100 typedef struct cx_allocator_s CxAllocator;
101
102
103
104
105 extern CxAllocator *cxDefaultAllocator;
106
107
108
109
110
111
112
113
114
115
116
117 __attribute__((__nonnull__))
118 typedef void (*cx_destructor_func)(
void *memory);
119
120
121
122
123
124
125
126
127
128
129
130
131 __attribute__((__nonnull__(
2)))
132 typedef void (*cx_destructor_func2)(
133 void *data,
134 void *memory
135 );
136
137
138
139
140
141
142
143
144
145
146
147 __attribute__((__nonnull__))
148 int cx_reallocate(
149 void **mem,
150 size_t n
151 );
152
153
154
155
156
157
158
159
160 __attribute__((__malloc__))
161 __attribute__((__alloc_size__(
2)))
162 void *cxMalloc(
163 const CxAllocator *allocator,
164 size_t n
165 );
166
167
168
169
170
171
172
173
174
175
176
177
178
179 __attribute__((__warn_unused_result__))
180 __attribute__((__alloc_size__(
3)))
181 void *cxRealloc(
182 const CxAllocator *allocator,
183 void *mem,
184 size_t n
185 );
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201 __attribute__((__nonnull__))
202 int cxReallocate(
203 const CxAllocator *allocator,
204 void **mem,
205 size_t n
206 );
207
208
209
210
211
212
213
214
215
216 __attribute__((__malloc__))
217 __attribute__((__alloc_size__(
2,
3)))
218 void *cxCalloc(
219 const CxAllocator *allocator,
220 size_t nelem,
221 size_t n
222 );
223
224
225
226
227
228
229
230
231
232 __attribute__((__nonnull__))
233 void cxFree(
234 const CxAllocator *allocator,
235 void *mem
236 );
237
238 #ifdef __cplusplus
239 }
240 #endif
241
242 #endif
243