diff --git a/object.c b/object.c index a9002d4..5b31491 100644 --- a/object.c +++ b/object.c @@ -373,7 +373,8 @@ oop map_get(oop map, oop key) return get(map, Map, elements)[pos].value; } -#define MAP_CHUNK_SIZE 8 +#define MAP_MIN_SIZE 4 +#define MAP_GROW_SIZE 2 oop map_insert(oop map, oop key, oop value, size_t pos) { @@ -387,7 +388,8 @@ oop map_insert(oop map, oop key, oop value, size_t pos) // check capacity and expand if needed if (map_size(map) >= get(map, Map, capacity)) { - size_t newCapacity = get(map, Map, capacity) + MAP_CHUNK_SIZE; + size_t newCapacity = get(map, Map, capacity) * MAP_GROW_SIZE; + if (newCapacity < MAP_MIN_SIZE) newCapacity= MAP_MIN_SIZE; set(map, Map, elements, realloc(get(map, Map, elements), sizeof(struct Pair) * newCapacity)); set(map, Map, capacity, newCapacity); }