vector.c 1.8 KB

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