aboutsummaryrefslogtreecommitdiff
path: root/src/std/vec.c
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-04-08 13:14:27 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-04-08 13:15:01 +0200
commitcf534d762754860ed5b714974f99acd282d48b3b (patch)
treebf22341cedfb50ee7bcd4e15f85add2329783f31 /src/std/vec.c
parent630fcb1846aed16b9ab62bcf700f668883f4521f (diff)
Restructure into src/{std,json}/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/std/vec.c')
-rw-r--r--src/std/vec.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/std/vec.c b/src/std/vec.c
new file mode 100644
index 0000000..077e64a
--- /dev/null
+++ b/src/std/vec.c
@@ -0,0 +1,27 @@
+#include <string.h>
+
+#include "assert.h"
+#include "types.h"
+#include "vec.h"
+
+Vec _Vec_new(Arena *a, size tsize, size cap, size align) {
+ assert(cap > 0, "negative cap");
+ Vec v = {0};
+ v.tsize = tsize;
+ v.cap = cap;
+ v.align = align;
+ v.len = 0;
+ v.data = alloc(a, cap, tsize, align);
+ return v;
+}
+
+void Vec_push(Arena *a, Vec *v, void *data) {
+ if (v->len == v->cap) {
+ void *cpy = alloc(a, v->cap * 2, v->tsize, v->align);
+ memcpy(cpy, v->data, v->len * v->tsize);
+ v->cap *= 2;
+ v->data = cpy;
+ }
+ memcpy(v->data + v->len * v->tsize, data, v->tsize);
+ v->len++;
+}