Index: third_party/WebKit/Source/wtf/HashTable.h |
diff --git a/third_party/WebKit/Source/wtf/HashTable.h b/third_party/WebKit/Source/wtf/HashTable.h |
index f7e276ad704370d3075f65e500c41b1377c3e18e..5b6edd2a22db6600db70136ad72a45acb18244b9 100644 |
--- a/third_party/WebKit/Source/wtf/HashTable.h |
+++ b/third_party/WebKit/Source/wtf/HashTable.h |
@@ -274,7 +274,7 @@ template <typename HashFunctions> class IdentityHashTranslator { |
public: |
template <typename T> static unsigned hash(const T& key) { return HashFunctions::hash(key); } |
template <typename T, typename U> static bool equal(const T& a, const U& b) { return HashFunctions::equal(a, b); } |
- template <typename T, typename U, typename V> static void translate(T& location, const U&, const V& value) { location = value; } |
+ template <typename T, typename U, typename V> static void translate(T& location, U&&, V&& value) { location = std::forward<V>(value); } |
}; |
template <typename HashTableType, typename ValueType> struct HashTableAddResult final { |
@@ -462,7 +462,7 @@ public: |
// A special version of add() that finds the object by hashing and comparing |
// with some other type, to avoid the cost of type conversion if the object |
// is already in the table. |
- template <typename HashTranslator, typename T, typename Extra> AddResult add(const T& key, const Extra&); |
+ template <typename HashTranslator, typename T, typename Extra> AddResult add(T&& key, Extra&&); |
template <typename HashTranslator, typename T, typename Extra> AddResult addPassingHashCode(const T& key, const Extra&); |
iterator find(KeyPeekInType key) { return find<IdentityTranslatorType>(key); } |
@@ -483,8 +483,8 @@ public: |
static bool isEmptyOrDeletedBucket(const ValueType& value) { return HashTableHelper<ValueType, Extractor, KeyTraits>:: isEmptyOrDeletedBucket(value); } |
ValueType* lookup(KeyPeekInType key) { return lookup<IdentityTranslatorType, KeyPeekInType>(key); } |
- template <typename HashTranslator, typename T> ValueType* lookup(T); |
- template <typename HashTranslator, typename T> const ValueType* lookup(T) const; |
+ template <typename HashTranslator, typename T> ValueType* lookup(const T&); |
Mikhail
2016/03/04 12:58:02
why not T&& ?
Yuta Kitamura
2016/03/04 13:55:37
This is used to calculate the hash value of T, so
|
+ template <typename HashTranslator, typename T> const ValueType* lookup(const T&) const; |
template <typename VisitorDispatcher> void trace(VisitorDispatcher); |
@@ -634,14 +634,14 @@ void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocato |
template <typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits, typename Allocator> |
template <typename HashTranslator, typename T> |
-inline Value* HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::lookup(T key) |
+inline Value* HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::lookup(const T& key) |
{ |
- return const_cast<Value*>(const_cast<const HashTable*>(this)->lookup<HashTranslator, T>(key)); |
+ return const_cast<Value*>(const_cast<const HashTable*>(this)->lookup<HashTranslator>(key)); |
} |
template <typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits, typename Allocator> |
template <typename HashTranslator, typename T> |
-inline const Value* HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::lookup(T key) const |
+inline const Value* HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::lookup(const T& key) const |
{ |
ASSERT(!m_accessForbidden); |
ASSERT((HashTableKeyChecker<HashTranslator, KeyTraits, HashFunctions::safeToCompareToEmptyOrDeleted>::checkKey(key))); |
@@ -795,7 +795,7 @@ inline void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, A |
template <typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits, typename Allocator> |
template <typename HashTranslator, typename T, typename Extra> |
-typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::AddResult HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::add(const T& key, const Extra& extra) |
+typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::AddResult HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allocator>::add(T&& key, Extra&& extra) |
{ |
ASSERT(!m_accessForbidden); |
ASSERT(Allocator::isAllocationAllowed()); |
@@ -848,7 +848,7 @@ typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo |
--m_deletedCount; |
} |
- HashTranslator::translate(*entry, key, extra); |
+ HashTranslator::translate(*entry, std::forward<T>(key), std::forward<Extra>(extra)); |
ASSERT(!isEmptyOrDeletedBucket(*entry)); |
++m_keyCount; |