rcx

library of miscellaneous bits of C code
git clone git://git.rr3.xyz/rcx
Log | Files | Refs | README | LICENSE

commit ecaf1b9447edf746e3d092fd3d8fca9a2743b78a
parent b5eeb0de85314588fae63639795d8d726586a5cc
Author: robert <robertrussell.72001@gmail.com>
Date:   Thu, 28 Jul 2022 14:19:08 -0700

Rename vector defs and fix vector bug

The bug is that the len and cap fields of the header contained garbage
after the very first allocation.

Diffstat:
Minc/cext/vector.h | 39++++++++++++++++++++-------------------
1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/inc/cext/vector.h b/inc/cext/vector.h @@ -14,27 +14,27 @@ typedef struct { #define VECHDR(v) ((vechdr *)(v) - 1) /* Defaults */ -#define VEC_STATIC +#define VECTOR_STATIC #define METHOD(name, prefix) JOIN(JOIN(prefix,_),name) -#define VEC_MIN_CAP 8 -#define VEC_ALLOC ereallocf -#define VEC_FREE free +#define VECTOR_MIN_CAP 8 +#define VECTOR_ALLOC ereallocf +#define VECTOR_FREE free -#define VEC_DECLARE(T, ...)\ -VEC_STATIC UNUSED void METHOD(free,##__VA_ARGS__)(T **v); \ -VEC_STATIC UNUSED usize METHOD(len,##__VA_ARGS__)(T **v); \ -VEC_STATIC UNUSED usize METHOD(cap,##__VA_ARGS__)(T **v); \ -VEC_STATIC UNUSED int METHOD(resize,##__VA_ARGS__)(T **v, usize cap); \ -VEC_STATIC UNUSED int METHOD(reserve,##__VA_ARGS__)(T **v, usize n); \ -VEC_STATIC UNUSED int METHOD(ins,##__VA_ARGS__)(T **v, usize i, T e); \ -VEC_STATIC UNUSED int METHOD(push,##__VA_ARGS__)(T **v, T e); \ -VEC_STATIC UNUSED T METHOD(del,##__VA_ARGS__)(T **v, usize i); \ -VEC_STATIC UNUSED T METHOD(pop,##__VA_ARGS__)(T **v); +#define VECTOR_DECLARE(T, ...)\ +VECTOR_STATIC UNUSED void METHOD(free,##__VA_ARGS__)(T **v); \ +VECTOR_STATIC UNUSED usize METHOD(len,##__VA_ARGS__)(T **v); \ +VECTOR_STATIC UNUSED usize METHOD(cap,##__VA_ARGS__)(T **v); \ +VECTOR_STATIC UNUSED int METHOD(resize,##__VA_ARGS__)(T **v, usize cap); \ +VECTOR_STATIC UNUSED int METHOD(reserve,##__VA_ARGS__)(T **v, usize n); \ +VECTOR_STATIC UNUSED int METHOD(ins,##__VA_ARGS__)(T **v, usize i, T e); \ +VECTOR_STATIC UNUSED int METHOD(push,##__VA_ARGS__)(T **v, T e); \ +VECTOR_STATIC UNUSED T METHOD(del,##__VA_ARGS__)(T **v, usize i); \ +VECTOR_STATIC UNUSED T METHOD(pop,##__VA_ARGS__)(T **v); -#define VEC_DEFINE(T, ...)\ +#define VECTOR_DEFINE(T, ...)\ void METHOD(free,##__VA_ARGS__)(T **v) { \ if (*v) \ - VEC_FREE(VECHDR(*v)); \ + VECTOR_FREE(VECHDR(*v)); \ *v = 0; \ } \ usize METHOD(len,##__VA_ARGS__)(T **v) { \ @@ -47,12 +47,13 @@ int METHOD(resize,##__VA_ARGS__)(T **v, usize cap) { \ if (cap == 0) { \ METHOD(free,##__VA_ARGS__)(v); \ } else { \ - cap = MAX(cap, VEC_MIN_CAP); \ + cap = MAX(cap, VECTOR_MIN_CAP); \ vechdr *h = *v ? VECHDR(*v) : 0; \ - h = VEC_ALLOC(h, sizeof *h, cap, sizeof (*v)[0]); \ + usize len = h ? h->len : 0; \ + h = VECTOR_ALLOC(h, sizeof *h, cap, sizeof (*v)[0]); \ if (!h) \ return -1; \ - h->len = MIN(h->len, cap); \ + h->len = MIN(len, cap); \ h->cap = cap; \ *v = (void *)(h + 1); \ } \