#ifndef NS_VEC_H #define NS_VEC_H #include #include #define ns_vec_gen(type) \ struct Vec_##type##_T { \ type *arr; \ size_t len; \ size_t cap; \ }; \ typedef struct Vec_##type##_T Vec_##type; #define ns_vec_init(type, vec, cap_) \ vec.len = 0; \ vec.cap = cap_; \ vec.arr = malloc(vec.cap * sizeof(type)); \ assert(vec.arr != NULL); #define ns_vec_push(type, vec, obj) \ if (vec.len + 1 > vec.cap) { \ vec.cap += 8; \ vec.arr = realloc(vec.arr, vec.cap * sizeof(type)); \ assert(vec.arr != NULL); \ } \ vec.arr[vec.len] = obj; \ vec.len++; #define ns_vec_destroy(vec) \ free(vec.arr); \ vec.arr = NULL; #endif