#include #include #include array_t *init_array() { array_t *a = safe_calloc(1, sizeof(array_t)); a->capacity = DEFAULT_ARR_LEN; a->size = 0; a->items = safe_calloc(a->capacity, sizeof(void *)); return a; } void array_push(array_t *a, void *item) { if (a->size >= a->capacity - 2) { a->capacity *= 2; a->items = realloc(a->items, a->capacity); } a->items[a->size] = item; a->size++; } void *array_pop(array_t *a) { if (a->size <= 0) return NULL; void *retval = a->items[a->size]; a->size--; return retval; } void array_free(void *x, void (*freefunc)(void *)) { array_t *a = (array_t *)x; for (int i = 0; i < a->size; i++) { freefunc(a->items[i]); } free(a->items); free(a); }