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