#ifndef _VECTOR_H_ #define _VECTOR_H_ #include #include struct vec { int *list; int size; int index; }; #define VEC_NEEDS_RESIZE(vec) (((vec)->index + 1) == (vec)->size) void* vec_resize (void* items, size_t new_size) { void *new_items = realloc(items, new_size); if (new_items == NULL) perror("vec_resize"); return new_items; } #define VEC_PUSH(vec, item) do {\ if (VEC_NEEDS_RESIZE(vec)) { \ (vec)->size *= 2; \ (vec)->list = vec_resize((vec)->list, (vec)->size * sizeof(item)); \ } \ \ (vec)->list[(vec)->index++] = item; } while (0) #define VEC_INIT(vec, items) \ (vec)->list = calloc(items, sizeof(__typeof__(*((vec)->list)))); \ (vec)->size = items; \ (vec)->index = 0 #define VEC_DESTROY(vec) \ free((vec)->list); \ (vec)->list = NULL; \ (vec)->index = (vec)->size = 0; #endif