#include "vector.h" #include #include #include #include static int vector_resize(struct vector *vec, size_t new_cap) { vec->data = realloc(vec->data, vec->entsize * new_cap); if (!vec->data) { vec->cap = 0; vec->size = 0; return -ENOMEM; } vec->cap = new_cap; return 0; } void vector_init(struct vector *vec, size_t entsize) { vec->size = 0; vec->cap = 0; vec->data = NULL; vec->entsize = entsize; } void vector_free(struct vector *vec) { vec->cap = 0; vec->size = 0; vec->entsize = 0; free(vec->data); vec->data = NULL; } void vector_release(struct vector *vec) { memset(vec->data, 0, vec->cap * vec->entsize); free(vec->data); vec->cap = 0; } void *vector_append(struct vector *vec) { if (vec->size == vec->cap) { if (vector_resize(vec, vec->cap + 8) != 0) { return NULL; } } 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; }