| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2008 David Levin <levin@chromium.org> | 3 * Copyright (C) 2008 David Levin <levin@chromium.org> |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 key ^= (key >> 7); | 444 key ^= (key >> 7); |
| 445 key ^= (key << 2); | 445 key ^= (key << 2); |
| 446 key ^= (key >> 20); | 446 key ^= (key >> 20); |
| 447 return key; | 447 return key; |
| 448 } | 448 } |
| 449 | 449 |
| 450 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> | 450 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> |
| 451 template<typename HashTranslator, typename T> | 451 template<typename HashTranslator, typename T> |
| 452 inline Value* HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTra
its, Allocator>::lookup(const T& key) | 452 inline Value* HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTra
its, Allocator>::lookup(const T& key) |
| 453 { | 453 { |
| 454 ValueType* table = m_table; |
| 455 if (!table) |
| 456 return 0; |
| 457 |
| 454 int k = 0; | 458 int k = 0; |
| 455 int sizeMask = m_tableSizeMask; | 459 int sizeMask = m_tableSizeMask; |
| 456 ValueType* table = m_table; | |
| 457 unsigned h = HashTranslator::hash(key); | 460 unsigned h = HashTranslator::hash(key); |
| 458 int i = h & sizeMask; | 461 int i = h & sizeMask; |
| 459 | 462 |
| 460 if (!table) | |
| 461 return 0; | |
| 462 | |
| 463 #if DUMP_HASHTABLE_STATS | 463 #if DUMP_HASHTABLE_STATS |
| 464 atomicIncrement(&HashTableStats::numAccesses); | 464 atomicIncrement(&HashTableStats::numAccesses); |
| 465 int probeCount = 0; | 465 int probeCount = 0; |
| 466 #endif | 466 #endif |
| 467 | 467 |
| 468 #if DUMP_HASHTABLE_STATS_PER_TABLE | 468 #if DUMP_HASHTABLE_STATS_PER_TABLE |
| 469 ++m_stats->numAccesses; | 469 ++m_stats->numAccesses; |
| 470 int perTableProbeCount = 0; | 470 int perTableProbeCount = 0; |
| 471 #endif | 471 #endif |
| 472 | 472 |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 #endif | 788 #endif |
| 789 #if DUMP_HASHTABLE_STATS_PER_TABLE | 789 #if DUMP_HASHTABLE_STATS_PER_TABLE |
| 790 ++m_stats->numReinserts; | 790 ++m_stats->numReinserts; |
| 791 #endif | 791 #endif |
| 792 | 792 |
| 793 Mover<ValueType, Traits::needsDestruction>::move(entry, *lookupForWritin
g(Extractor::extract(entry)).first); | 793 Mover<ValueType, Traits::needsDestruction>::move(entry, *lookupForWritin
g(Extractor::extract(entry)).first); |
| 794 } | 794 } |
| 795 | 795 |
| 796 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> | 796 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> |
| 797 template <typename HashTranslator, typename T> | 797 template <typename HashTranslator, typename T> |
| 798 typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits,
Allocator>::iterator HashTable<Key, Value, Extractor, HashFunctions, Traits, Key
Traits, Allocator>::find(const T& key) | 798 inline typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyT
raits, Allocator>::iterator HashTable<Key, Value, Extractor, HashFunctions, Trai
ts, KeyTraits, Allocator>::find(const T& key) |
| 799 { | 799 { |
| 800 if (!m_table) | |
| 801 return end(); | |
| 802 | |
| 803 ValueType* entry = lookup<HashTranslator>(key); | 800 ValueType* entry = lookup<HashTranslator>(key); |
| 804 if (!entry) | 801 if (!entry) |
| 805 return end(); | 802 return end(); |
| 806 | 803 |
| 807 return makeKnownGoodIterator(entry); | 804 return makeKnownGoodIterator(entry); |
| 808 } | 805 } |
| 809 | 806 |
| 810 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> | 807 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> |
| 811 template <typename HashTranslator, typename T> | 808 template <typename HashTranslator, typename T> |
| 812 typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits,
Allocator>::const_iterator HashTable<Key, Value, Extractor, HashFunctions, Trait
s, KeyTraits, Allocator>::find(const T& key) const | 809 inline typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyT
raits, Allocator>::const_iterator HashTable<Key, Value, Extractor, HashFunctions
, Traits, KeyTraits, Allocator>::find(const T& key) const |
| 813 { | 810 { |
| 814 if (!m_table) | |
| 815 return end(); | |
| 816 | |
| 817 ValueType* entry = const_cast<HashTable*>(this)->lookup<HashTranslator>(
key); | 811 ValueType* entry = const_cast<HashTable*>(this)->lookup<HashTranslator>(
key); |
| 818 if (!entry) | 812 if (!entry) |
| 819 return end(); | 813 return end(); |
| 820 | 814 |
| 821 return makeKnownGoodConstIterator(entry); | 815 return makeKnownGoodConstIterator(entry); |
| 822 } | 816 } |
| 823 | 817 |
| 824 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> | 818 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> |
| 825 template <typename HashTranslator, typename T> | 819 template <typename HashTranslator, typename T> |
| 826 bool HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo
cator>::contains(const T& key) const | 820 bool HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo
cator>::contains(const T& key) const |
| 827 { | 821 { |
| 828 if (!m_table) | |
| 829 return false; | |
| 830 | |
| 831 return const_cast<HashTable*>(this)->lookup<HashTranslator>(key); | 822 return const_cast<HashTable*>(this)->lookup<HashTranslator>(key); |
| 832 } | 823 } |
| 833 | 824 |
| 834 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> | 825 template<typename Key, typename Value, typename Extractor, typename HashFunc
tions, typename Traits, typename KeyTraits, typename Allocator> |
| 835 void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo
cator>::remove(ValueType* pos) | 826 void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo
cator>::remove(ValueType* pos) |
| 836 { | 827 { |
| 837 #if DUMP_HASHTABLE_STATS | 828 #if DUMP_HASHTABLE_STATS |
| 838 atomicIncrement(&HashTableStats::numRemoves); | 829 atomicIncrement(&HashTableStats::numRemoves); |
| 839 #endif | 830 #endif |
| 840 #if DUMP_HASHTABLE_STATS_PER_TABLE | 831 #if DUMP_HASHTABLE_STATS_PER_TABLE |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1102 inline bool operator!=(const HashTableIteratorAdapter<T, U>& a, const HashTa
bleConstIteratorAdapter<T, U>& b) | 1093 inline bool operator!=(const HashTableIteratorAdapter<T, U>& a, const HashTa
bleConstIteratorAdapter<T, U>& b) |
| 1103 { | 1094 { |
| 1104 return a.m_impl != b.m_impl; | 1095 return a.m_impl != b.m_impl; |
| 1105 } | 1096 } |
| 1106 | 1097 |
| 1107 } // namespace WTF | 1098 } // namespace WTF |
| 1108 | 1099 |
| 1109 #include "wtf/HashIterators.h" | 1100 #include "wtf/HashIterators.h" |
| 1110 | 1101 |
| 1111 #endif // WTF_HashTable_h | 1102 #endif // WTF_HashTable_h |
| OLD | NEW |