diff options
Diffstat (limited to 'src/vec.c')
| -rw-r--r-- | src/vec.c | 29 |
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; } |
