Index: src/base/hashmap.h |
diff --git a/src/base/hashmap.h b/src/base/hashmap.h |
index 852d7d125c28dfafd3f2279aa4513c39ba8ce6d7..619108a0a78ed12660fe2325377da2dc952e984b 100644 |
--- a/src/base/hashmap.h |
+++ b/src/base/hashmap.h |
@@ -55,11 +55,9 @@ class TemplateHashMapImpl { |
// If an entry with matching key is found, returns that entry. |
// If no matching entry is found, a new entry is inserted with |
// corresponding key, key hash, and default initialized value. |
- Entry* LookupOrInsert(const Key& key, uint32_t hash, |
- AllocationPolicy allocator = AllocationPolicy()); |
+ Entry* LookupOrInsert(const Key& key, uint32_t hash); |
- Entry* InsertNew(const Key& key, uint32_t hash, |
- AllocationPolicy allocator = AllocationPolicy()); |
+ Entry* InsertNew(const Key& key, uint32_t hash); |
// Removes the entry with matching key. |
// It returns the value of the deleted entry |
@@ -102,11 +100,12 @@ class TemplateHashMapImpl { |
Entry* map_; |
uint32_t capacity_; |
uint32_t occupancy_; |
+ AllocationPolicy allocator_; |
Entry* map_end() const { return map_ + capacity_; } |
Entry* Probe(const Key& key, uint32_t hash) const; |
- void Initialize(uint32_t capacity, AllocationPolicy allocator); |
- void Resize(AllocationPolicy allocator); |
+ void Initialize(uint32_t capacity); |
+ void Resize(); |
}; |
template <typename Key> |
@@ -125,14 +124,15 @@ typedef TemplateHashMapImpl<void*, void*, DefaultAllocationPolicy> HashMap; |
template <typename Key, typename Value, class AllocationPolicy> |
TemplateHashMapImpl<Key, Value, AllocationPolicy>::TemplateHashMapImpl( |
- MatchFun match, uint32_t initial_capacity, AllocationPolicy allocator) { |
+ MatchFun match, uint32_t initial_capacity, AllocationPolicy allocator) |
+ : allocator_(allocator) { |
match_ = match; |
- Initialize(initial_capacity, allocator); |
+ Initialize(initial_capacity); |
} |
template <typename Key, typename Value, class AllocationPolicy> |
TemplateHashMapImpl<Key, Value, AllocationPolicy>::~TemplateHashMapImpl() { |
- AllocationPolicy::Delete(map_); |
+ allocator_.Delete(map_); |
} |
template <typename Key, typename Value, class AllocationPolicy> |
@@ -146,20 +146,20 @@ TemplateHashMapImpl<Key, Value, AllocationPolicy>::Lookup(const Key& key, |
template <typename Key, typename Value, class AllocationPolicy> |
typename TemplateHashMapImpl<Key, Value, AllocationPolicy>::Entry* |
TemplateHashMapImpl<Key, Value, AllocationPolicy>::LookupOrInsert( |
- const Key& key, uint32_t hash, AllocationPolicy allocator) { |
+ const Key& key, uint32_t hash) { |
// Find a matching entry. |
Entry* p = Probe(key, hash); |
if (p->exists()) { |
return p; |
} |
- return InsertNew(key, hash, allocator); |
+ return InsertNew(key, hash); |
} |
template <typename Key, typename Value, class AllocationPolicy> |
typename TemplateHashMapImpl<Key, Value, AllocationPolicy>::Entry* |
-TemplateHashMapImpl<Key, Value, AllocationPolicy>::InsertNew( |
- const Key& key, uint32_t hash, AllocationPolicy allocator) { |
+TemplateHashMapImpl<Key, Value, AllocationPolicy>::InsertNew(const Key& key, |
+ uint32_t hash) { |
// Find a matching entry. |
Entry* p = Probe(key, hash); |
DCHECK(!p->exists()); |
@@ -171,7 +171,7 @@ TemplateHashMapImpl<Key, Value, AllocationPolicy>::InsertNew( |
// Grow the map if we reached >= 80% occupancy. |
if (occupancy_ + occupancy_ / 4 >= capacity_) { |
- Resize(allocator); |
+ Resize(); |
p = Probe(key, hash); |
} |
@@ -290,9 +290,9 @@ TemplateHashMapImpl<Key, Value, AllocationPolicy>::Probe(const Key& key, |
template <typename Key, typename Value, class AllocationPolicy> |
void TemplateHashMapImpl<Key, Value, AllocationPolicy>::Initialize( |
- uint32_t capacity, AllocationPolicy allocator) { |
+ uint32_t capacity) { |
DCHECK(base::bits::IsPowerOfTwo32(capacity)); |
- map_ = reinterpret_cast<Entry*>(allocator.New(capacity * sizeof(Entry))); |
+ map_ = reinterpret_cast<Entry*>(allocator_.New(capacity * sizeof(Entry))); |
if (map_ == nullptr) { |
FATAL("Out of memory: HashMap::Initialize"); |
return; |
@@ -302,25 +302,24 @@ void TemplateHashMapImpl<Key, Value, AllocationPolicy>::Initialize( |
} |
template <typename Key, typename Value, class AllocationPolicy> |
-void TemplateHashMapImpl<Key, Value, AllocationPolicy>::Resize( |
- AllocationPolicy allocator) { |
+void TemplateHashMapImpl<Key, Value, AllocationPolicy>::Resize() { |
Entry* map = map_; |
uint32_t n = occupancy_; |
// Allocate larger map. |
- Initialize(capacity_ * 2, allocator); |
+ Initialize(capacity_ * 2); |
// Rehash all current entries. |
for (Entry* p = map; n > 0; p++) { |
if (p->exists()) { |
- Entry* entry = LookupOrInsert(p->key, p->hash, allocator); |
+ Entry* entry = LookupOrInsert(p->key, p->hash); |
entry->value = p->value; |
n--; |
} |
} |
// Delete old map. |
- AllocationPolicy::Delete(map); |
+ allocator_.Delete(map); |
} |
// A hash map for pointer keys and values with an STL-like interface. |
@@ -368,10 +367,9 @@ class TemplateHashMap |
Iterator begin() const { return Iterator(this, this->Start()); } |
Iterator end() const { return Iterator(this, nullptr); } |
- Iterator find(Key* key, bool insert = false, |
- AllocationPolicy allocator = AllocationPolicy()) { |
+ Iterator find(Key* key, bool insert = false) { |
if (insert) { |
- return Iterator(this, this->LookupOrInsert(key, key->Hash(), allocator)); |
+ return Iterator(this, this->LookupOrInsert(key, key->Hash())); |
} |
return Iterator(this, this->Lookup(key, key->Hash())); |
} |