1: /*
2: * BIRD Library -- Generic Buffer Structure
3: *
4: * (c) 2013 Ondrej Zajicek <santiago@crfreenet.org>
5: * (c) 2013 CZ.NIC z.s.p.o.
6: *
7: * Can be freely distributed and used under the terms of the GNU GPL.
8: */
9:
10: #ifndef _BIRD_BUFFER_H_
11: #define _BIRD_BUFFER_H_
12:
13: #include "lib/resource.h"
14: #include "sysdep/config.h"
15:
16: #define BUFFER(type) struct { type *data; uint used, size; }
17:
18: #define BUFFER_SIZE(v) ((v).size * sizeof(* (v).data))
19:
20: #define BUFFER_INIT(v,pool,isize) \
21: ({ \
22: (v).used = 0; \
23: (v).size = (isize); \
24: (v).data = mb_alloc(pool, BUFFER_SIZE(v)); \
25: })
26:
27: #define BUFFER_SET(v,nsize) \
28: ({ \
29: (v).used = (nsize); \
30: if ((v).used > (v).size) \
31: buffer_realloc((void **) &((v).data), &((v).size), (v).used, sizeof(* (v).data)); \
32: })
33:
34: #define BUFFER_INC(v,step) \
35: ({ \
36: uint _o = (v).used; \
37: BUFFER_SET(v, (v).used + (step)); \
38: (v).data + _o; \
39: })
40:
41: #define BUFFER_DEC(v,step) ({ (v).used -= (step); })
42:
43: #define BUFFER_PUSH(v) (*BUFFER_INC(v,1))
44:
45: #define BUFFER_POP(v) BUFFER_DEC(v,1)
46:
47: #define BUFFER_FLUSH(v) ({ (v).used = 0; })
48:
49: #endif /* _BIRD_BUFFER_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>