From 60585faf7951cffb6046280bdd5f91275fb97d65 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Sun, 12 Oct 2025 00:07:02 -0400 Subject: input buffer and key repeat --- array.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 array.h (limited to 'array.h') diff --git a/array.h b/array.h new file mode 100644 index 0000000..c2d908a --- /dev/null +++ b/array.h @@ -0,0 +1,34 @@ +#ifndef ARRAY_H_ +#define ARRAY_H_ +#include + +typedef struct { + size_t size; + size_t capacity; + char array[]; +} array_info; + +array_info* array_new_(size_t item_size, size_t capacity); +void array_print(void* array); +void array_pop(void* array); +void* array_add_(void* array, size_t item_size); + + +#define array_clear(array) (((array_info*)(array))[-1].size = 0) +#define array_size(array) (((array_info*)(array))[-1].size) +#define array_new(type, capacity) ((type*)(array_new_(sizeof(type), capacity)->array)) + +#define array_free(array) do { \ + free(((array_info*)(array)) - 1); \ + (array) = NULL; \ +} while (0) + +#define array_add(array, value) do { \ + void* __temp = array_add_((array), sizeof(*(array))); \ + (array) = __temp; \ + (array)[array_size((array)) - 1] = value; \ +} while (0) + +#define array_last(array) (array_size(array) ? (array)[array_size(array) - 1] : NULL); + +#endif // ARRAY_H_ -- cgit v1.2.3