From 8b9091180c092efafb427a562be6fae3ba525396 Mon Sep 17 00:00:00 2001 From: Clark Gaebel Date: Tue, 2 Dec 2014 19:03:10 -0800 Subject: [PATCH 1/2] Prevent hashtable shrinking past INITIAL_CAPACITY on clear. --- src/libstd/collections/hash/map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs index 50a00714ea06c..ac9373809eed7 100644 --- a/src/libstd/collections/hash/map.rs +++ b/src/libstd/collections/hash/map.rs @@ -966,7 +966,7 @@ impl, V, S, H: Hasher> HashMap { pub fn clear(&mut self) { // Prevent reallocations from happening from now on. Makes it possible // for the map to be reused but has a downside: reserves permanently. - self.resize_policy.reserve(self.table.size()); + self.resize_policy.reserve(max(self.table.size(), INITIAL_CAPACITY)); let cap = self.table.capacity(); let mut buckets = Bucket::first(&mut self.table); From fcf5b129a54a7ff59c6d449dc03fd84b755f713c Mon Sep 17 00:00:00 2001 From: Clark Gaebel Date: Tue, 2 Dec 2014 19:07:33 -0800 Subject: [PATCH 2/2] next power of two --- src/libstd/collections/hash/map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libstd/collections/hash/map.rs b/src/libstd/collections/hash/map.rs index ac9373809eed7..ef40c0706b4e2 100644 --- a/src/libstd/collections/hash/map.rs +++ b/src/libstd/collections/hash/map.rs @@ -966,7 +966,7 @@ impl, V, S, H: Hasher> HashMap { pub fn clear(&mut self) { // Prevent reallocations from happening from now on. Makes it possible // for the map to be reused but has a downside: reserves permanently. - self.resize_policy.reserve(max(self.table.size(), INITIAL_CAPACITY)); + self.resize_policy.reserve(max(self.table.size(), INITIAL_CAPACITY).next_power_of_two()); let cap = self.table.capacity(); let mut buckets = Bucket::first(&mut self.table);