aboutsummaryrefslogtreecommitdiff
path: root/src/vec.c
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2025-07-23 19:39:13 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2025-07-23 19:39:26 +0200
commit421300c27123ca647772dc6d9bd0cabf7f5f9c99 (patch)
treed916b62056b2440aef374b21373d16272bb709ee /src/vec.c
parent53e9e371a16ae2d167f1fc2577dff2c2426eed68 (diff)
refactor: src & pragma once
Diffstat (limited to 'src/vec.c')
-rw-r--r--src/vec.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/vec.c b/src/vec.c
new file mode 100644
index 0000000..a5c2fb4
--- /dev/null
+++ b/src/vec.c
@@ -0,0 +1,29 @@
+#include <string.h>
+
+#include "../include/assert.h"
+#include "../include/types.h"
+#include "../include/vec.h"
+
+Vec _Vec_new(Arena *a, size tsize, size cap, size align) {
+ assert(cap > 0);
+ 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++;
+}
+
+void *_Vec_get(Vec v, size pos) { return v.data + v.tsize * pos; }