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:
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); \
} \