Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Unified Diff: src/base/hashmap.h

Issue 2369963002: [base] Remove PointersMatch, making a separate std::equals hashmap (Closed)
Patch Set: Fix the other simulators Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ast/scopes.cc ('k') | src/bootstrapper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/base/hashmap.h
diff --git a/src/base/hashmap.h b/src/base/hashmap.h
index ce72f84d2ad05a3f1b4e5d03fa80b9e208f7e774..d8151861cbe070457560602aab02768927d60b93 100644
--- a/src/base/hashmap.h
+++ b/src/base/hashmap.h
@@ -36,8 +36,8 @@ class TemplateHashMapImpl {
// initial_capacity is the size of the initial hash map;
// it must be a power of 2 (and thus must not be 0).
- TemplateHashMapImpl(MatchFun match = MatchFun(),
- uint32_t capacity = kDefaultHashMapCapacity,
+ TemplateHashMapImpl(uint32_t capacity = kDefaultHashMapCapacity,
+ MatchFun match = MatchFun(),
AllocationPolicy allocator = AllocationPolicy());
~TemplateHashMapImpl();
@@ -93,6 +93,8 @@ class TemplateHashMapImpl {
Entry* map_;
uint32_t capacity_;
uint32_t occupancy_;
+ // TODO(leszeks): This takes up space even if it has no state, maybe replace
+ // with something that does the empty base optimisation e.g. std::tuple
MatchFun match_;
Entry* map_end() const { return map_ + capacity_; }
@@ -106,7 +108,7 @@ class TemplateHashMapImpl {
template <typename Key, typename Value, typename MatchFun,
class AllocationPolicy>
TemplateHashMapImpl<Key, Value, MatchFun, AllocationPolicy>::
- TemplateHashMapImpl(MatchFun match, uint32_t initial_capacity,
+ TemplateHashMapImpl(uint32_t initial_capacity, MatchFun match,
AllocationPolicy allocator)
: match_(match) {
Initialize(initial_capacity, allocator);
@@ -336,7 +338,7 @@ void TemplateHashMapImpl<Key, Value, MatchFun, AllocationPolicy>::Resize(
}
template <typename AllocationPolicy>
-class PointerTemplateHashMapImpl
+class CustomMatcherTemplateHashMapImpl
: public TemplateHashMapImpl<void*, void*, bool (*)(void*, void*),
AllocationPolicy> {
typedef TemplateHashMapImpl<void*, void*, bool (*)(void*, void*),
@@ -346,24 +348,38 @@ class PointerTemplateHashMapImpl
public:
typedef bool (*MatchFun)(void*, void*);
- PointerTemplateHashMapImpl(MatchFun match = PointersMatch,
- uint32_t capacity = Base::kDefaultHashMapCapacity,
- AllocationPolicy allocator = AllocationPolicy())
- : Base(match, capacity, allocator) {}
+ CustomMatcherTemplateHashMapImpl(
+ MatchFun match, uint32_t capacity = Base::kDefaultHashMapCapacity,
+ AllocationPolicy allocator = AllocationPolicy())
+ : Base(capacity, match, allocator) {}
+};
+
+typedef CustomMatcherTemplateHashMapImpl<DefaultAllocationPolicy>
+ CustomMatcherHashMap;
+
+template <typename AllocationPolicy>
+class PointerTemplateHashMapImpl
+ : public TemplateHashMapImpl<void*, void*, std::equal_to<void*>,
+ AllocationPolicy> {
+ typedef TemplateHashMapImpl<void*, void*, std::equal_to<void*>,
+ AllocationPolicy>
+ Base;
- static bool PointersMatch(void* key1, void* key2) { return key1 == key2; }
+ public:
+ PointerTemplateHashMapImpl(uint32_t capacity = Base::kDefaultHashMapCapacity,
+ AllocationPolicy allocator = AllocationPolicy())
+ : Base(capacity, std::equal_to<void*>(), allocator) {}
};
typedef PointerTemplateHashMapImpl<DefaultAllocationPolicy> HashMap;
// A hash map for pointer keys and values with an STL-like interface.
-template <class Key, class Value, class AllocationPolicy>
-class TemplateHashMap : private PointerTemplateHashMapImpl<AllocationPolicy> {
- typedef PointerTemplateHashMapImpl<AllocationPolicy> Base;
+template <class Key, class Value, class MatchFun, class AllocationPolicy>
+class TemplateHashMap
+ : private TemplateHashMapImpl<void*, void*, MatchFun, AllocationPolicy> {
+ typedef TemplateHashMapImpl<void*, void*, MatchFun, AllocationPolicy> Base;
public:
- typedef bool (*MatchFun)(void*, void*);
-
STATIC_ASSERT(sizeof(Key*) == sizeof(void*)); // NOLINT
STATIC_ASSERT(sizeof(Value*) == sizeof(void*)); // NOLINT
struct value_type {
@@ -393,7 +409,7 @@ class TemplateHashMap : private PointerTemplateHashMapImpl<AllocationPolicy> {
TemplateHashMap(MatchFun match,
AllocationPolicy allocator = AllocationPolicy())
- : Base(match, Base::kDefaultHashMapCapacity, allocator) {}
+ : Base(Base::kDefaultHashMapCapacity, match, allocator) {}
Iterator begin() const { return Iterator(this, this->Start()); }
Iterator end() const { return Iterator(this, nullptr); }
« no previous file with comments | « src/ast/scopes.cc ('k') | src/bootstrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698