/* vector.c * Copyright 2023 Anon Anonson, Ognjen 'xolatile' Milan Robovic, Emil Williams * SPDX Identifier: GPL-3.0-only / NO WARRANTY / NO GUARANTEE */ #include "vector.h" void vector_init(vector_t * vector, size_t element_size, size_t element_count) { vector->data = NULL; vector->element_size = element_size; vector->element_count = element_count; vector->data = malloc(vector->element_size * vector->element_count); if ((! vector->data) && (vector->element_count)) { puts("vector_init"); exit(EXIT_FAILURE); } memset(vector->data, 0, vector->element_size * vector->element_count); } void vector_push(vector_t * vector, void * data) { ++vector->element_count; vector->data = realloc(vector->data, vector->element_size * vector->element_count); if (! vector->data) { puts("vector_push"); exit(EXIT_FAILURE); } memcpy(&vector->data[(vector->element_count - 1) * vector->element_size], data, vector->element_size); } void vector_pop(vector_t * vector) { (void) vector; } void * vector_get(const vector_t * const vector, const size_t element) { if (element >= vector->element_count) { puts("vector_get"); exit(EXIT_FAILURE); } return &vector->data[vector->element_size * element]; } void vector_set(vector_t * vector, void * data, size_t element) { if (element >= vector->element_count) { puts("vector_set"); exit(EXIT_FAILURE); } memcpy(&vector->data[vector->element_size * element], data, vector->element_size); } void vector_free(vector_t * vector) { free(vector->data); }