Highlight things
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 line
1.6KB

  1. /* vector.c
  2. * Copyright 2023 Anon Anonson, Ognjen 'xolatile' Milan Robovic, Emil Williams
  3. * SPDX Identifier: GPL-3.0-only / NO WARRANTY / NO GUARANTEE */
  4. #include "vector.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <assert.h>
  9. void vector_init(vector_t * vector,
  10. size_t element_size,
  11. size_t element_count) {
  12. assert(element_size);
  13. vector->data = NULL;
  14. vector->element_size = element_size;
  15. vector->element_count = element_count;
  16. vector->data = calloc(vector->element_count, vector->element_size);
  17. assert(vector->data);
  18. }
  19. void vector_push(vector_t * vector,
  20. void * data) {
  21. assert(vector);
  22. vector->element_count += 1;
  23. vector->data = realloc(vector->data,
  24. vector->element_size * vector->element_count);
  25. assert(vector->data);
  26. memcpy(&vector->data[(vector->element_count - 1) * vector->element_size],
  27. data,
  28. vector->element_size);
  29. }
  30. void vector_pop(vector_t * vector) {
  31. assert(vector); // UNUSED
  32. }
  33. void * vector_get(const vector_t * const vector,
  34. const size_t element) {
  35. assert(vector);
  36. assert(element < vector->element_count);
  37. return &vector->data[vector->element_size * element];
  38. }
  39. void vector_set(vector_t * vector,
  40. void * data,
  41. size_t element) {
  42. assert(vector);
  43. assert(element >= vector->element_count);
  44. memcpy(&vector->data[vector->element_size * element],
  45. data,
  46. vector->element_size);
  47. }
  48. void vector_free(vector_t * vector) {
  49. free(vector->data);
  50. }