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.

65 lines
1.5KB

  1. #include "vector.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <assert.h>
  6. void vector_init(vector_t * vector,
  7. size_t element_size,
  8. size_t element_count) {
  9. assert(element_size);
  10. vector->data = NULL;
  11. vector->element_size = element_size;
  12. vector->element_count = element_count;
  13. vector->data = (char *)calloc(vector->element_count, vector->element_size);
  14. assert(vector->data);
  15. }
  16. void vector_push(vector_t * vector,
  17. void * data) {
  18. assert(vector);
  19. vector->element_count += 1;
  20. vector->data = (char *)realloc(vector->data,
  21. vector->element_size * vector->element_count);
  22. assert(vector->data);
  23. memcpy(&vector->data[(vector->element_count - 1) * vector->element_size],
  24. data,
  25. vector->element_size);
  26. }
  27. void vector_pop(vector_t * vector) {
  28. assert(vector); // UNUSED
  29. }
  30. void * vector_get(const vector_t * const vector,
  31. const size_t element) {
  32. assert(vector);
  33. assert(element < vector->element_count);
  34. return &vector->data[vector->element_size * element];
  35. }
  36. void vector_set(vector_t * vector,
  37. void * data,
  38. size_t element) {
  39. assert(vector);
  40. assert(element >= vector->element_count);
  41. memcpy(&vector->data[vector->element_size * element],
  42. data,
  43. vector->element_size);
  44. }
  45. void vector_free(vector_t * vector) {
  46. free(vector->data);
  47. }