#include #include "wv_vec.h" void wv_vec_init(struct wv_vec *v, size_t unit_size) { v->data = NULL; v->len = 0; v->cap = 0; v->unit_size = unit_size; } void wv_vec_push(struct wv_vec *v, const void *item) { if (v->len >= v->cap) { v->cap = (v->cap == 0) ? 8 : v->cap * 2; v->data = realloc(v->data, v->cap * v->unit_size); } void *target = (char *)v->data + (v->len * v->unit_size); memcpy(target, item, v->unit_size); v->len++; } void *wv_vec_pop(struct wv_vec *v) { if (v->len == 0) return NULL; v->len--; return (char *)v->data + (v->len * v->unit_size); } void *wv_vec_last(struct wv_vec *v) { if (v->len == 0) return NULL; return (char *)v->data + ((v->len - 1) * v->unit_size); } void wv_vec_free(struct wv_vec *v) { free(v->data); v->data = NULL; v->len = v->cap = 0; }