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.c | |
| parent | 36d12796644b296f300d9daf631f7702e1d81b86 (diff) | |
input buffer and key repeat
Diffstat (limited to 'array.c')
| -rw-r--r-- | array.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -0,0 +1,43 @@ +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include "array.h" + + +array_info* array_new_(size_t item_size, size_t capacity) { + array_info* info = calloc(1, sizeof(array_info) + item_size * capacity); + info->capacity = capacity; + return info; +} + +void* array_add_(void* array, size_t item_size) { + array_info* info = NULL; + if (!array) { + info = array_new_(item_size, 8); + } + else { + info = ((array_info*)array) - 1; + } + if (info->size == info->capacity) { + info->capacity <<= 1; + info = realloc(info, sizeof(array_info) + (info->capacity * item_size)); + } + info->size++; + return &(info[1]); +} + +void array_print(void* array) { + array_info* info = &((array_info*)array)[-1]; + printf( "size: %lu\n" + "capacity: %lu\n" + "array: %p\n", + info->size, + info->capacity, + info->array); +} + +void array_pop(void* array) { + array_info* info = &((array_info*)array)[-1]; + if (info->size) + info->size--; +} |
