From 8296fa3a8fa773adbf7544910fd12f84c278cfc3 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Tue, 14 Oct 2025 15:32:16 -0400 Subject: text rendering which doesn't work --- array.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index aa25e93..8e3a64f 100644 --- a/array.c +++ b/array.c @@ -4,9 +4,26 @@ #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; +array_info* array_new_(size_t item_size, size_t size) { + // find capacity + size_t cap = 8; + if (size > cap) { + cap = size; + + // round up to next power of 2 + cap--; + cap |= cap >> 1; + cap |= cap >> 2; + cap |= cap >> 4; + cap |= cap >> 8; + cap |= cap >> 16; + cap++; + } + + // make array + array_info* info = calloc(1, sizeof(array_info) + item_size * cap); + info->size = size; + info->capacity = cap; return info; } @@ -41,3 +58,4 @@ void array_pop(void* array) { if (info->size) info->size--; } + -- cgit v1.2.3