diff --git a/source/toy_scope.c b/source/toy_scope.c index e6bbe71..68f0e49 100644 --- a/source/toy_scope.c +++ b/source/toy_scope.c @@ -85,11 +85,12 @@ static Toy_ScopeEntry* adjustScopeEntries(Toy_Scope* scope, unsigned int newCapa return newEntries; } - //movethe old data into the new block of memory + //move the old data into the new block of memory unsigned int oldCapacity = scope->capacity; Toy_ScopeEntry* oldEntries = scope->data; scope->capacity = newCapacity; scope->data = newEntries; + scope->count = 0; //for each existing entry in the old array, copy it into the new array for (unsigned int i = 0; i < oldCapacity; i++) { @@ -146,6 +147,11 @@ void Toy_declareScope(Toy_Scope* scope, Toy_String* key, Toy_ValueType type, Toy return; } + //expand the table capacity if needed + if (scope->count >= scope->capacity * 0.8f) { + scope->data = adjustScopeEntries(scope, scope->capacity * TOY_SCOPE_EXPANSION_RATE); + } + value = coerceValueTypesIfAble(type, value); //type check diff --git a/source/toy_scope.h b/source/toy_scope.h index da30b2e..249366a 100644 --- a/source/toy_scope.h +++ b/source/toy_scope.h @@ -52,5 +52,5 @@ TOY_API void Toy_private_decrementScopeRefCount(Toy_Scope* scope); //expand when the contents passes a certain percentage (80%) of the capacity #ifndef TOY_SCOPE_EXPANSION_THRESHOLD -#define TOY_SCOPE_EXPANSION_THRESHOLD 0.8f +#define TOY_SCOPE_EXPANSION_THRESHOLD 0.7f #endif diff --git a/source/toy_table.h b/source/toy_table.h index df46000..4335b5a 100644 --- a/source/toy_table.h +++ b/source/toy_table.h @@ -40,5 +40,5 @@ TOY_API Toy_TableEntry* Toy_private_lookupTableEntryPtr(Toy_Table** tableHandle, //expand when the contents passes a certain percentage (80%) of the capacity #ifndef TOY_TABLE_EXPANSION_THRESHOLD -#define TOY_TABLE_EXPANSION_THRESHOLD 0.8f +#define TOY_TABLE_EXPANSION_THRESHOLD 0.7f #endif diff --git a/tests/units/test_table.c b/tests/units/test_table.c index ad1d753..a88a450 100644 --- a/tests/units/test_table.c +++ b/tests/units/test_table.c @@ -586,7 +586,7 @@ int test_table_expansions_under_stress(void) { //check the state if (table == NULL || - table->capacity != 512 || + table->capacity != 1024 || table->count != 400 || TOY_VALUE_IS_INTEGER(result) != true ||