#include "vector.h" #include static void vector_resize(Vector *v, size_t new_capacity); Vector *vector_new(void) { Vector *v = (Vector *)malloc(sizeof(Vector)); if (!v) return NULL; *v = (Vector) { .data = malloc(VECTOR_INITIAL_CAPACITY * sizeof(void *)), .size = 0, .capacity = VECTOR_INITIAL_CAPACITY, }; if (!v->data) { free(v); return NULL; } return v; } void vector_delete(Vector *v) { free(v->data); free(v); } void vector_push(Vector *v, void *element) { if (v->size >= v->capacity) vector_resize(v, v->capacity * VECTOR_GROWTH_FACTOR); v->data[v->size++] = element; } void *vector_pop(Vector *v) { if (v->size == 0) return NULL; return v->data[--v->size]; } void *vector_get(Vector *v, size_t index) { if (index >= v->size) return NULL; return v->data[index]; } void vector_set(Vector *v, size_t index, void *element) { if (index >= v->size) return; v->data[index] = element; } size_t vector_size(Vector *v) { return v->size; } int vector_is_empty(Vector *v) { return v->size == 0; } void vector_clear(Vector *v) { v->size = 0; } static void vector_resize(Vector *v, size_t new_capacity) { void **new_data = (void **)realloc(v->data, new_capacity * sizeof(void *)); if (new_data) { v->data = new_data; v->capacity = new_capacity; } }