diff --git a/src/dyn_arr.c b/src/dyn_arr.c index 0dfbe82..943d378 100644 --- a/src/dyn_arr.c +++ b/src/dyn_arr.c @@ -37,10 +37,14 @@ void *dyna_ensure_capacity(void *array, int64_t item_count) { } size_t new_capacity = minimum_capacity * ARRAY_GROWTH_MULTIPLIER; + // Force minimum automatic reallocation + if (new_capacity <= ARRAY_INITIAL_CAPACITY) { + new_capacity = ARRAY_INITIAL_CAPACITY; + } - // Return if the array is valid and so small it's not worth reallocating - if (header->capacity > minimum_capacity && - new_capacity <= ARRAY_INITIAL_CAPACITY) { + // If we're at minimum auto capacity and the capacity is fine don't realloc + if (new_capacity <= ARRAY_INITIAL_CAPACITY && + header->capacity >= minimum_capacity) { return header + 1; } diff --git a/src/main.c b/src/main.c index c8a3035..c01fee7 100644 --- a/src/main.c +++ b/src/main.c @@ -6,13 +6,13 @@ int main() { uint64_t *dyna_array = dyna_init(uint64_t); - for (uint64_t i = 0; i < 100; i++) { + for (uint64_t i = 0; i < 1000; i++) { dyna_append(dyna_array, i); printf("length: %zu capacity: %zu value: %lu\n", dyna_length(dyna_array), dyna_capacity(dyna_array), dyna_array[i - 1]); } - for (uint64_t i = 100; i > 0; i--) { + for (uint64_t i = 1000; i > 0; i--) { printf("length: %zu capacity: %zu value: %lu\n", dyna_length(dyna_array), dyna_capacity(dyna_array), dyna_array[i - 1]); dyna_pop(dyna_array);