diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2025-10-12 00:07:02 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2025-10-12 00:07:02 -0400 |
| commit | 60585faf7951cffb6046280bdd5f91275fb97d65 (patch) | |
| tree | 30aad6fb91d33ed3b9a291d2d3fff7d9ed9a6f0c /array.h | |
| parent | 36d12796644b296f300d9daf631f7702e1d81b86 (diff) | |
input buffer and key repeat
Diffstat (limited to 'array.h')
| -rw-r--r-- | array.h | 34 |
1 files changed, 34 insertions, 0 deletions
@@ -0,0 +1,34 @@ +#ifndef ARRAY_H_ +#define ARRAY_H_ +#include <stdlib.h> + +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_ |
