diff options
Diffstat (limited to 'src/array.h')
| -rw-r--r-- | src/array.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/array.h b/src/array.h new file mode 100644 index 0000000..75d88d0 --- /dev/null +++ b/src/array.h @@ -0,0 +1,35 @@ +#ifndef ARRAY_H +#define ARRAY_H +#include <stddef.h> + +#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 */ |
