#ifndef ARRAY_H #define ARRAY_H #include #define ARRAY_INITIAL_CAPACITY 4 #define array(T) (T *)array_new(sizeof(T)) #define array_append(arr, item) do { \ array_header_t *h = array_get_header(arr); \ if (h->capacity < h->length + 1) { \ arr = array_grow(arr); \ } \ arr[h->length++] = item; \ } while (0) typedef struct array_header { size_t capacity; size_t item_size; size_t length; } array_header_t; void * array_new(size_t item_size); array_header_t * array_get_header(void *arr); void * array_grow(void *arr); size_t array_length(void *arr); #endif /* ARRAY_H */