thesis-lisp/core/vector.c

30 lines
689 B
C

#include "vector.h"
#include <assert.h>
#include <stdlib.h>
static void vector_resize(struct vector *vec, size_t new_cap) {
vec->data = realloc(vec->data, vec->entsize * new_cap);
assert(vec->data);
vec->cap = new_cap;
}
void vector_init(struct vector *vec, size_t entsize) {
vec->size = 0;
vec->cap = 0;
vec->data = NULL;
vec->entsize = entsize;
}
void *vector_append(struct vector *vec) {
if (vec->size == vec->cap) {
vector_resize(vec, vec->cap + 8);
}
return vec->data + vec->entsize * vec->size++;
}
void *vector_ref(struct vector *vec, size_t index) {
assert(index < vec->size);
return vec->data + vec->entsize * index;
}