1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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; }
|