Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #include "vector.h"
  2.  
  3. #define INITIAL_CAPACITY 2
  4. #define RESIZE_FACTOR 2
  5.  
  6. vector* init_vector_with_init_cap(size_t initCap) {
  7. vector* v = (vector*)malloc(sizeof(vector));
  8. if(v == NULL)
  9. return NULL;
  10.  
  11. v->size = 0;
  12. v->capacity = initCap;
  13.  
  14. v->data = (vector_data**)malloc(v->capacity * sizeof(vector_data*));
  15. if(v->data == NULL) {
  16. free(v);
  17. return NULL;
  18. }
  19. return v;
  20. }
  21.  
  22. vector* init_vector() {
  23. return init_vector_with_init_cap(INITIAL_CAPACITY);
  24. }
  25.  
  26. void free_vector(vector* v) {
  27. //check
  28. for(int i = 0; i < v->size; i++) {
  29. free_vector_data(v->data[i]);
  30. }
  31. free(v->data);
  32. free(v);
  33. }
  34.  
  35. static bool resize(vector* v) {
  36. size_t factor = RESIZE_FACTOR;
  37. vector_data** tmp = (vector_data**)realloc(v->data, factor * v->capacity * sizeof(vector_data*));
  38. if(tmp == NULL)
  39. return false;
  40.  
  41. v->capacity *= factor;
  42. v->data = tmp;
  43. return true;
  44. }
  45.  
  46. bool add_to_vector(vector* v, vector_data* data) {
  47. if(data == NULL)
  48. return false;
  49.  
  50. if(v->size >= v->capacity)
  51. if(!resize(v))
  52. return false;
  53.  
  54. v->data[v->size] = data;
  55. v->size++;
  56. return true;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement