1 /* ISC license. */
2 
3 #ifndef GENALLOC_H
4 #define GENALLOC_H
5 
6 #include <skalibs/stralloc.h>
7 #include <skalibs/functypes.h>
8 
9 typedef stralloc genalloc, *genalloc_ref ;
10 
11 #define GENALLOC_ZERO STRALLOC_ZERO
12 #define genalloc_zero stralloc_zero
13 
14 #define genalloc_s(type, g) ((type *)((g)->s))
15 #define genalloc_len(type, g) ((g)->len/sizeof(type))
16 #define genalloc_setlen(type, g, n) ((g)->len = (n)*sizeof(type))
17 
18 #define genalloc_ready(type, g, n) stralloc_ready((g), (n)*sizeof(type))
19 #define genalloc_ready_tuned(type, g, n, base, fracnum, fracden) stralloc_ready_tuned((g), (n)*sizeof(type), base, fracnum, fracden)
20 #define genalloc_readyplus(type, g, n) stralloc_readyplus((g), (n)*sizeof(type))
21 #define genalloc_free(type, g) stralloc_free(g)
22 #define genalloc_shrink(type, g) stralloc_shrink(g)
23 #define genalloc_catb(type, g, s, n) stralloc_catb((g), (char const *)(s), (n)*sizeof(type))
24 #define genalloc_copyb(type, g, s, n) stralloc_copyb((g), (char const *)(s), (n)*sizeof(type))
25 #define genalloc_copy(type, g1, g2) stralloc_copy((g1), g2)
26 #define genalloc_cat(type, g1, g2) stralloc_cat((g1), g2)
27 #define genalloc_append(type, g, p) stralloc_catb((g), (char const *)(p), sizeof(type))
28 #define genalloc_reverse(type, g) stralloc_reverse_blocks((g), sizeof(type))
29 #define genalloc_insertb(type, g, offset, s, n) stralloc_insertb((g), (offset)*sizeof(type), (char const *)(s), (n)*sizeof(type))
30 #define genalloc_insert(type, g1, offset, g2) stralloc_insert((g1), (offset)*sizeof(type), (g2))
31 
32 #define genalloc_deepfree(type, g, f) genalloc_deepfree_size(g, (freefunc_t_ref)(f), sizeof(type))
33 extern void genalloc_deepfree_size (genalloc *, freefunc_t_ref, size_t) ;
34 
35 #endif
36