update README.txt
[mkp224o.git] / vec.h
blobf7d063148de6bc447f64a402e12a9a9e07022b0e
1 #define VEC_STRUCT(typename, inttype) \
2 struct typename { \
3 inttype *buf; \
4 size_t len, alen; \
7 #define VEC_INIT(ctl) memset(&ctl, 0, sizeof(ctl))
9 #define VEC_ADD(ctl, val) { \
10 if (!(ctl).alen) { \
11 (ctl).alen = 8; \
12 (ctl).buf = malloc(8 * sizeof(val)); \
13 } else if ((ctl).len >= (ctl).alen) { \
14 (ctl).alen *= 2; \
15 (ctl).buf = realloc((ctl).buf, (ctl).alen * sizeof(val)); \
16 } \
17 (ctl).buf[(ctl).len++] = val; \
20 #define VEC_ADDN(ctl, valt, n) { \
21 if (!(ctl).alen) { \
22 (ctl).alen = 8; \
23 (ctl).buf = malloc(8 * sizeof(valt)); \
24 } \
25 size_t nlen = (ctl).alen; \
26 while ((ctl).len + n > nlen) \
27 nlen *= 2; \
28 if (nlen > (ctl).alen) { \
29 (ctl).alen = nlen; \
30 (ctl).buf = realloc((ctl).buf, nlen * sizeof(valt)); \
31 } \
32 (ctl).len += n; \
35 #define VEC_FREE(ctl) { free((ctl).buf); memset(&(ctl), 0, sizeof((ctl))); }
37 #define VEC_LENGTH(ctl) ((ctl).len)
38 #define VEC_BUF(ctl, num) ((ctl).buf[num])