From ecf6d868aa0fbf1f30c2a286a526018d412e7e28 Mon Sep 17 00:00:00 2001 From: Riley Beckett Date: Fri, 24 Oct 2025 19:14:25 -0400 Subject: these macros maybe work --- array.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index d863c59..bb8d522 100644 --- a/array.c +++ b/array.c @@ -40,16 +40,19 @@ void* array_add_(void* array, size_t item_size) { info = realloc(info, sizeof(array_info) + (info->capacity * item_size)); } info->size++; - return &(info[1]); + return info->array; } -void array_resize(void* array, size_t size) { - array_info* info = &((array_info*)array)[-1]; - info->size = size; - if (size > info->capacity) { +void* array_resize_(void* array, size_t item_size, size_t size) { + array_info* info = NULL; + if (!array) { + info = array_new_(item_size, 0); + } + else { + info = ((array_info*)array) - 1; + } + if (size >= info->capacity) { info->capacity = size; - - // round up to next power of 2 info->capacity--; info->capacity |= info->capacity >> 1; info->capacity |= info->capacity >> 2; @@ -57,7 +60,10 @@ void array_resize(void* array, size_t size) { info->capacity |= info->capacity >> 8; info->capacity |= info->capacity >> 16; info->capacity++; + info = realloc(info, sizeof(array_info) + (info->capacity * item_size)); } + info->size = size; + return info->array; } void array_print(void* array) { -- cgit v1.2.3