#include "vector.h" #include Vector *vec_new(uint32_t obj_size, Destructor destructor) { Vector *self = (Vector *)malloc(sizeof(Vector)); (*self).elements = NULL; (*self).obj_size = obj_size; (*self).len = 0; (*self).destructor = destructor; return self; } Vector *vec_new_with_capacity(uint32_t obj_size, uint32_t obj_number, Destructor destructor) { Vector *self = (Vector *)malloc(sizeof(Vector)); (*self).elements = (void **)malloc(obj_number); (*self).obj_size = obj_size; (*self).len = 0; (*self).destructor = destructor; return self; } uint32_t vec_len(Vector *self) { return self->len; } uint32_t vec_capacity(Vector *self) { return sizeof(self->elements); } uint8_t vec_realloc(Vector *self) { void ** elements = self->elements; uint32_t new_capacity = (vec_capacity(self) > 0) ? vec_capacity(self) * 2 : 1; self->elements = realloc(self->elements, new_capacity); if (!self->elements) { self->elements = elements; return 1; } return 0; } uint8_t vec_push(Vector *self, void *element) { UNINPLEMENTED; return 1; /* if (self->len + 1 > vec_capacity(self)) { */ /* vec_realloc(self); */ /* } */ /* ++(*self).len; */ } uint8_t vec_pop(Vector *self) { UNINPLEMENTED; return 1; } // TODO void *vec_at(Vector *self, uint32_t index) { return self->elements + (index * self->obj_size); } void *vec_at_safe(Vector *self, uint32_t index) { if (index < 0 || index >= self->len) { return NULL; } return vec_at(self, index); } void vec_delete(Vector *self) { foreach (void *elem, self) { self->destructor(elem); } free(self->elements); free(self); }