summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2016-01-31 22:50:34 +0100
committerClifford Wolf <clifford@clifford.at>2016-01-31 22:50:34 +0100
commit13e15a24a206f56d9daa15665aba4948fd5dfef5 (patch)
treec7e497d3311a2e0d5c85ec4a6bf3704a93b6a27b /kernel
parent173fc4f4203a6aefef57ee1dfb0b8e4e0b59c078 (diff)
Added reserve() method to haslib classes and
calculate hashtable size based on entries capacity, not size
Diffstat (limited to 'kernel')
-rw-r--r--kernel/hashlib.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/hashlib.h b/kernel/hashlib.h
index f015bf4d..f740fc50 100644
--- a/kernel/hashlib.h
+++ b/kernel/hashlib.h
@@ -233,7 +233,7 @@ class dict
void do_rehash()
{
hashtable.clear();
- hashtable.resize(hashtable_size(entries.size() * hashtable_size_factor), -1);
+ hashtable.resize(hashtable_size(entries.capacity() * hashtable_size_factor), -1);
for (int i = 0; i < int(entries.size()); i++) {
do_assert(-1 <= entries[i].next && entries[i].next < int(entries.size()));
@@ -552,6 +552,7 @@ public:
return !operator==(other);
}
+ void reserve(size_t n) { entries.reserve(n); }
size_t size() const { return entries.size(); }
bool empty() const { return entries.empty(); }
void clear() { hashtable.clear(); entries.clear(); }
@@ -601,7 +602,7 @@ protected:
void do_rehash()
{
hashtable.clear();
- hashtable.resize(hashtable_size(entries.size() * hashtable_size_factor), -1);
+ hashtable.resize(hashtable_size(entries.capacity() * hashtable_size_factor), -1);
for (int i = 0; i < int(entries.size()); i++) {
do_assert(-1 <= entries[i].next && entries[i].next < int(entries.size()));
@@ -868,6 +869,7 @@ public:
return !operator==(other);
}
+ void reserve(size_t n) { entries.reserve(n); }
size_t size() const { return entries.size(); }
bool empty() const { return entries.empty(); }
void clear() { hashtable.clear(); entries.clear(); }
@@ -938,6 +940,7 @@ public:
database.swap(other.database);
}
+ void reserve(size_t n) { database.reserve(n); }
size_t size() const { return database.size(); }
bool empty() const { return database.empty(); }
void clear() { database.clear(); }
@@ -1031,6 +1034,7 @@ public:
parents.swap(other.parents);
}
+ void reserve(size_t n) { database.reserve(n); }
size_t size() const { return database.size(); }
bool empty() const { return database.empty(); }
void clear() { database.clear(); parents.clear(); }