Advertisement
Guest User

IntVector.c

a guest
Feb 21st, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.55 KB | None | 0 0
  1. #include "IntVector.h"
  2. #include <stdlib.h>
  3.  
  4. IntVector *int_vector_new(size_t initial_capacity)
  5. {
  6.     IntVector* a;
  7.     a = (IntVector*)malloc(sizeof(IntVector));
  8.     if(!a){
  9.         return NULL;
  10.     }
  11.     a -> arr = (int*)malloc(initial_capacity * sizeof(int));
  12.     if(!a->arr){
  13.         return NULL;
  14.     }
  15.     a -> capacity = initial_capacity;
  16.     a -> size = 0;
  17.     return a;
  18. }
  19.  
  20. IntVector *int_vector_copy(const IntVector *v)
  21. {
  22.     IntVector* a = int_vector_new(v -> capacity);
  23.     a->arr = memcpy(a -> arr, v -> arr, (sizeof(int) * (v -> size)));
  24.     if(!a->arr){
  25.         return NULL;
  26.     }
  27.     a -> size = v -> size;
  28.     return a;
  29. }
  30.  
  31. void int_vector_free(IntVector *v){
  32.     free(v->arr);
  33.     free(v);
  34. }
  35.  
  36. int int_vector_get_item(const IntVector *v, size_t index){
  37.     return v->arr[index];
  38. }
  39.  
  40. void int_vector_set_item(IntVector *v, size_t index, int item){
  41.     v->arr[index] = item;
  42. }
  43.  
  44. size_t int_vector_get_size(const IntVector *v){
  45.     return v->size;
  46. }
  47.  
  48. size_t int_vector_get_capacity(const IntVector *v){
  49.     return v->capacity;
  50. }
  51.  
  52. int int_vector_push_back(IntVector* v, int item){
  53.     if(v->size == v->capacity){
  54.         int* array = realloc(v->arr,(v->capacity * sizeof(int) * 2));
  55.         if (!array){
  56.             return -1;
  57.         }
  58.         v->arr = array;
  59.         v->capacity = v->capacity * 2;
  60.         for (int i = v->size; i < v->capacity; i++){
  61.             v->arr[i] = 0;
  62.         }
  63.     }
  64.     v->arr[v->size] = item;
  65.     v->size++;
  66.     return 0;
  67. }
  68.  
  69. void int_vector_pop_back(IntVector *v){
  70.     if(v->size != 0 && v->capacity != 0){
  71.     v->arr[v->size] = 0;
  72.     v->size--;
  73.     }
  74. }
  75.  
  76. int int_vector_shrink_to_fit(IntVector *v){
  77.     int* array = realloc(v->arr,(v->size * sizeof(int)));
  78.     if (!array){
  79.         return -1;
  80.     }
  81.     v->arr = array;
  82.     v->capacity = v->size;
  83.     return 0;
  84. }
  85.  
  86. int int_vector_resize(IntVector *v, size_t new_size){
  87.     if(v->size < new_size){
  88.         int* array = realloc(v->arr,(new_size * sizeof(int)));
  89.         if (!array){
  90.             return -1;
  91.         }
  92.         v->arr = array;
  93.         v->size = new_size;
  94.         v->capacity = new_size;
  95.     }
  96.     if(v->size > new_size){
  97.         int code = int_vector_shrink_to_fit(v);
  98.         return code;
  99.     }
  100.     return 0;
  101. }
  102.  
  103. int int_vector_reserve(IntVector *v, size_t new_capacity){
  104.     if(v->capacity >= new_capacity){
  105.         return 0;
  106.     }
  107.     int* array = realloc(v->arr,(new_capacity * sizeof(int)));
  108.     if (!array){
  109.         return -1;
  110.     }
  111.     v->arr = array;
  112.     v->capacity = new_capacity;
  113.     return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement