diff options
Diffstat (limited to 'server/array.c')
-rw-r--r-- | server/array.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/server/array.c b/server/array.c new file mode 100644 index 0000000..84ed938 --- /dev/null +++ b/server/array.c @@ -0,0 +1,37 @@ +#include <array.h> +#include <helpers.h> +#include <stdlib.h> + +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); +} |