pss-total/lib/include/ns_vec.h
2024-05-24 16:54:17 -05:00

35 lines
1,007 B
C

#ifndef NS_VEC_H
#define NS_VEC_H
#include <assert.h>
#include <stdlib.h>
#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