From e7f69c8fbbbcbddde84933b2becd91e787d1ac63 Mon Sep 17 00:00:00 2001 From: Johnny Richard Date: Fri, 11 Apr 2025 01:15:01 +0200 Subject: Intial commit Signed-off-by: Johnny Richard --- src/array.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/array.h (limited to 'src/array.h') 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 + +#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 */ -- cgit v1.2.3