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 #ifndef UCX_BUFFER_H
48 #define UCX_BUFFER_H
49
50 #include "common.h"
51 #include "allocator.h"
52
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56
57
58
59
60 #define CX_BUFFER_DEFAULT 0x00
61
62
63
64
65 #define CX_BUFFER_FREE_CONTENTS 0x01
66
67
68
69
70 #define CX_BUFFER_AUTO_EXTEND 0x02
71
72
73 typedef struct {
74
75 union {
76
77
78
79 char *space;
80
81
82
83 unsigned char *bytes;
84 };
85
86 CxAllocator
const *allocator;
87
88 size_t pos;
89
90 size_t capacity;
91
92 size_t size;
93
94
95
96
97 size_t flush_threshold;
98
99
100
101
102 size_t flush_blksize;
103
104
105
106
107
108
109
110
111
112
113
114 size_t flush_blkmax;
115
116
117
118
119
120 cx_write_func flush_func;
121
122
123
124
125 void *flush_target;
126
127
128
129
130
131
132
133 int flags;
134 } cx_buffer_s;
135
136
137
138
139 typedef cx_buffer_s CxBuffer;
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157 __attribute__((__nonnull__(
1)))
158 int cxBufferInit(
159 CxBuffer *buffer,
160 void *space,
161 size_t capacity,
162 CxAllocator
const *allocator,
163 int flags
164 );
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 CxBuffer *cxBufferCreate(
182 void *space,
183 size_t capacity,
184 CxAllocator
const *allocator,
185 int flags
186 );
187
188
189
190
191
192
193
194
195
196
197 __attribute__((__nonnull__))
198 void cxBufferDestroy(CxBuffer *buffer);
199
200
201
202
203
204
205
206
207
208
209 __attribute__((__nonnull__))
210 void cxBufferFree(CxBuffer *buffer);
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245 __attribute__((__nonnull__))
246 int cxBufferShift(
247 CxBuffer *buffer,
248 off_t shift
249 );
250
251
252
253
254
255
256
257
258
259
260 __attribute__((__nonnull__))
261 int cxBufferShiftRight(
262 CxBuffer *buffer,
263 size_t shift
264 );
265
266
267
268
269
270
271
272
273
274
275
276
277
278 __attribute__((__nonnull__))
279 int cxBufferShiftLeft(
280 CxBuffer *buffer,
281 size_t shift
282 );
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304 __attribute__((__nonnull__))
305 int cxBufferSeek(
306 CxBuffer *buffer,
307 off_t offset,
308 int whence
309 );
310
311
312
313
314
315
316
317
318 __attribute__((__nonnull__))
319 void cxBufferClear(CxBuffer *buffer);
320
321
322
323
324
325
326
327
328 __attribute__((__nonnull__))
329 int cxBufferEof(CxBuffer
const *buffer);
330
331
332
333
334
335
336
337
338
339
340
341 __attribute__((__nonnull__))
342 int cxBufferMinimumCapacity(
343 CxBuffer *buffer,
344 size_t capacity
345 );
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373 __attribute__((__nonnull__))
374 size_t cxBufferWrite(
375 void const *ptr,
376 size_t size,
377 size_t nitems,
378 CxBuffer *buffer
379 );
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394 __attribute__((__nonnull__))
395 size_t cxBufferRead(
396 void *ptr,
397 size_t size,
398 size_t nitems,
399 CxBuffer *buffer
400 );
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417 __attribute__((__nonnull__))
418 int cxBufferPut(
419 CxBuffer *buffer,
420 int c
421 );
422
423
424
425
426
427
428
429
430 __attribute__((__nonnull__))
431 size_t cxBufferPutString(
432 CxBuffer *buffer,
433 const char *str
434 );
435
436
437
438
439
440
441
442
443
444 __attribute__((__nonnull__))
445 int cxBufferGet(CxBuffer *buffer);
446
447 #ifdef __cplusplus
448 }
449 #endif
450
451 #endif
452