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.

74 line
1.7KB

  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. void vector_init(vector_t * vector,
  6. size_t element_size,
  7. size_t element_count) {
  8. vector->data = NULL;
  9. vector->element_size = element_size;
  10. vector->element_count = element_count;
  11. vector->data = malloc(vector->element_size * vector->element_count);
  12. if ((! vector->data) && (vector->element_count)) {
  13. puts("vector_init");
  14. exit(EXIT_FAILURE);
  15. }
  16. memset(vector->data,
  17. 0,
  18. vector->element_size * vector->element_count);
  19. }
  20. void vector_push(vector_t * vector,
  21. void * data) {
  22. ++vector->element_count;
  23. vector->data = realloc(vector->data,
  24. vector->element_size * vector->element_count);
  25. if (! vector->data) {
  26. puts("vector_push");
  27. exit(EXIT_FAILURE);
  28. }
  29. memcpy(&vector->data[(vector->element_count - 1) * vector->element_size],
  30. data,
  31. vector->element_size);
  32. }
  33. void vector_pop(vector_t * vector) {
  34. (void) vector;
  35. }
  36. void * vector_get(const vector_t * const vector,
  37. const size_t element) {
  38. if (element >= vector->element_count) {
  39. puts("vector_get");
  40. exit(EXIT_FAILURE);
  41. }
  42. return &vector->data[vector->element_size * element];
  43. }
  44. void vector_set(vector_t * vector,
  45. void * data,
  46. size_t element) {
  47. if (element >= vector->element_count) {
  48. puts("vector_set");
  49. exit(EXIT_FAILURE);
  50. }
  51. memcpy(&vector->data[vector->element_size * element],
  52. data,
  53. vector->element_size);
  54. }
  55. void vector_free(vector_t * vector) {
  56. free(vector->data);
  57. }