vector.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "vector.h"
  2. #include <debug.h>
  3. void Vector_log(char* msg){
  4. dbg_sprintf(dbgout, "[Vector] %s\n", msg);
  5. }
  6. bool Vector_consume(struct Vector* self, const void* value){
  7. bool success = vc_vector_push_back(self->_vector, value);
  8. free(value);
  9. return success;
  10. }
  11. bool Vector_push(struct Vector* self, const void* value){
  12. return vc_vector_push_back(self->_vector, value);
  13. }
  14. void* Vector_pop(struct Vector* self){
  15. void* item = vc_vector_end(self->_vector);
  16. if(vc_vector_pop_back(self->_vector)){
  17. return NULL;
  18. }
  19. return item;
  20. }
  21. bool Vector_replace(struct Vector* self, size_t i, const void* value){
  22. return vc_vector_replace(self->_vector, i, value);
  23. }
  24. void Vector_clear(struct Vector* self){
  25. vc_vector_clear(self->_vector);
  26. }
  27. size_t Vector_count(struct Vector* self){
  28. return self->_vector->count;
  29. }
  30. void free_Vector(struct Vector* self){
  31. Vector_log("Freeing vc_vector");
  32. self->clear(self);
  33. free(self->_vector);
  34. Vector_log("Freeing Vector");
  35. free(self);
  36. }
  37. void* Vector_get(Vector* self, size_t i){
  38. return vc_vector_at(self->_vector, i);
  39. }
  40. Vector* new_Vector(int size, size_t obj_size, vc_vector_deleter* deleter){
  41. return new_VectorFromVC(vc_vector_create(size, obj_size, deleter));
  42. }
  43. Vector* new_VectorFromVC(vc_vector* vector){
  44. Vector* self = (Vector*)malloc(sizeof(Vector));
  45. self->_vector = vector;
  46. self->consume = &Vector_consume;
  47. self->push = &Vector_push;
  48. self->pop = &Vector_pop;
  49. self->replace = &Vector_replace;
  50. self->clear = &Vector_clear;
  51. self->count = &Vector_count;
  52. self->get = &Vector_get;
  53. return self;
  54. }
  55. Vector* copy_Vector(struct Vector* vector){
  56. return new_VectorFromVC(vc_vector_create_copy(vector->_vector));
  57. }