#include #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, "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++; }