30 lines
689 B
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;
|
|
}
|