diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2025-10-14 15:32:16 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2025-10-14 15:32:16 -0400 |
| commit | 8296fa3a8fa773adbf7544910fd12f84c278cfc3 (patch) | |
| tree | 16417661e1efd266438171abc932cde357121ebd /array.c | |
| parent | 458f9d0b5f1b83d3f2e11cead790cdf6ac867e11 (diff) | |
text rendering which doesn't work
Diffstat (limited to 'array.c')
| -rw-r--r-- | array.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -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--; } + |
