diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2025-10-22 12:26:19 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2025-10-22 12:26:19 -0400 |
| commit | 90d6b2a866c6da29921dfae3d684203fd232ea74 (patch) | |
| tree | b7e95964708bc81c3237a8d67c3d27309fa88637 /array.c | |
| parent | a3117976dc912a35575c1c5813a480001cd8b789 (diff) | |
some improvements
Diffstat (limited to 'array.c')
| -rw-r--r-- | array.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -43,6 +43,23 @@ void* array_add_(void* array, size_t item_size) { return &(info[1]); } +void array_resize(void* array, size_t size) { + array_info* info = &((array_info*)array)[-1]; + info->size = size; + 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; + info->capacity |= info->capacity >> 4; + info->capacity |= info->capacity >> 8; + info->capacity |= info->capacity >> 16; + info->capacity++; + } +} + void array_print(void* array) { array_info* info = &((array_info*)array)[-1]; printf( "size: %lu\n" |
