| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 template< | 35 template< |
| 36 typename ValueArg, | 36 typename ValueArg, |
| 37 typename HashArg = typename DefaultHash<ValueArg>::Hash, | 37 typename HashArg = typename DefaultHash<ValueArg>::Hash, |
| 38 typename TraitsArg = HashTraits<ValueArg>, | 38 typename TraitsArg = HashTraits<ValueArg>, |
| 39 typename Allocator = DefaultAllocator> class HashSet { | 39 typename Allocator = DefaultAllocator> class HashSet { |
| 40 WTF_USE_ALLOCATOR(HashSet); | 40 WTF_USE_ALLOCATOR(HashSet); |
| 41 private: | 41 private: |
| 42 typedef HashArg HashFunctions; | 42 typedef HashArg HashFunctions; |
| 43 typedef TraitsArg ValueTraits; | 43 typedef TraitsArg ValueTraits; |
| 44 typedef const typename ValueTraits::PeekInType& ValuePeekInType; | 44 typedef typename ValueTraits::PeekInType ValuePeekInType; |
| 45 typedef typename ValueTraits::PassInType ValuePassInType; |
| 45 | 46 |
| 46 public: | 47 public: |
| 47 typedef typename ValueTraits::TraitType ValueType; | 48 typedef typename ValueTraits::TraitType ValueType; |
| 48 | 49 |
| 49 private: | 50 private: |
| 50 typedef HashTable<ValueType, ValueType, IdentityExtractor, | 51 typedef HashTable<ValueType, ValueType, IdentityExtractor, |
| 51 HashFunctions, ValueTraits, ValueTraits, Allocator> HashTableType; | 52 HashFunctions, ValueTraits, ValueTraits, Allocator> HashTableType; |
| 52 | 53 |
| 53 public: | 54 public: |
| 54 typedef HashTableConstIteratorAdapter<HashTableType, ValueTraits> iterat
or; | 55 typedef HashTableConstIteratorAdapter<HashTableType, ValueTraits> iterat
or; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 79 // An alternate version of find() that finds the object by hashing and c
omparing | 80 // An alternate version of find() that finds the object by hashing and c
omparing |
| 80 // with some other type, to avoid the cost of type conversion. HashTrans
lator | 81 // with some other type, to avoid the cost of type conversion. HashTrans
lator |
| 81 // must have the following function members: | 82 // must have the following function members: |
| 82 // static unsigned hash(const T&); | 83 // static unsigned hash(const T&); |
| 83 // static bool equal(const ValueType&, const T&); | 84 // static bool equal(const ValueType&, const T&); |
| 84 template<typename HashTranslator, typename T> iterator find(const T&) co
nst; | 85 template<typename HashTranslator, typename T> iterator find(const T&) co
nst; |
| 85 template<typename HashTranslator, typename T> bool contains(const T&) co
nst; | 86 template<typename HashTranslator, typename T> bool contains(const T&) co
nst; |
| 86 | 87 |
| 87 // The return value is a pair of an iterator to the new value's location
, | 88 // The return value is a pair of an iterator to the new value's location
, |
| 88 // and a bool that is true if an new entry was added. | 89 // and a bool that is true if an new entry was added. |
| 89 AddResult add(ValuePeekInType); | 90 AddResult add(ValuePassInType); |
| 90 | 91 |
| 91 // An alternate version of add() that finds the object by hashing and co
mparing | 92 // An alternate version of add() that finds the object by hashing and co
mparing |
| 92 // with some other type, to avoid the cost of type conversion if the obj
ect is already | 93 // with some other type, to avoid the cost of type conversion if the obj
ect is already |
| 93 // in the table. HashTranslator must have the following function members
: | 94 // in the table. HashTranslator must have the following function members
: |
| 94 // static unsigned hash(const T&); | 95 // static unsigned hash(const T&); |
| 95 // static bool equal(const ValueType&, const T&); | 96 // static bool equal(const ValueType&, const T&); |
| 96 // static translate(ValueType&, const T&, unsigned hashCode); | 97 // static translate(ValueType&, const T&, unsigned hashCode); |
| 97 template<typename HashTranslator, typename T> AddResult add(const T&); | 98 template<typename HashTranslator, typename T> AddResult add(const T&); |
| 98 | 99 |
| 99 void remove(ValuePeekInType); | 100 void remove(ValuePeekInType); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 182 } |
| 182 | 183 |
| 183 template<typename Value, typename HashFunctions, typename Traits, typename A
llocator> | 184 template<typename Value, typename HashFunctions, typename Traits, typename A
llocator> |
| 184 template<typename HashTranslator, typename T> | 185 template<typename HashTranslator, typename T> |
| 185 inline bool HashSet<Value, HashFunctions, Traits, Allocator>::contains(const
T& value) const | 186 inline bool HashSet<Value, HashFunctions, Traits, Allocator>::contains(const
T& value) const |
| 186 { | 187 { |
| 187 return m_impl.template contains<HashSetTranslatorAdapter<HashTranslator>
>(value); | 188 return m_impl.template contains<HashSetTranslatorAdapter<HashTranslator>
>(value); |
| 188 } | 189 } |
| 189 | 190 |
| 190 template<typename T, typename U, typename V, typename W> | 191 template<typename T, typename U, typename V, typename W> |
| 191 inline typename HashSet<T, U, V, W>::AddResult HashSet<T, U, V, W>::add(Valu
ePeekInType value) | 192 inline typename HashSet<T, U, V, W>::AddResult HashSet<T, U, V, W>::add(Valu
ePassInType value) |
| 192 { | 193 { |
| 193 return m_impl.add(value); | 194 return m_impl.add(value); |
| 194 } | 195 } |
| 195 | 196 |
| 196 template<typename Value, typename HashFunctions, typename Traits, typename A
llocator> | 197 template<typename Value, typename HashFunctions, typename Traits, typename A
llocator> |
| 197 template<typename HashTranslator, typename T> | 198 template<typename HashTranslator, typename T> |
| 198 inline typename HashSet<Value, HashFunctions, Traits, Allocator>::AddResult | 199 inline typename HashSet<Value, HashFunctions, Traits, Allocator>::AddResult |
| 199 HashSet<Value, HashFunctions, Traits, Allocator>::add(const T& value) | 200 HashSet<Value, HashFunctions, Traits, Allocator>::add(const T& value) |
| 200 { | 201 { |
| 201 return m_impl.template addPassingHashCode<HashSetTranslatorAdapter<HashT
ranslator> >(value, value); | 202 return m_impl.template addPassingHashCode<HashSetTranslatorAdapter<HashT
ranslator> >(value, value); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 } | 238 } |
| 238 | 239 |
| 239 template<typename ValueType, typename HashTableType> | 240 template<typename ValueType, typename HashTableType> |
| 240 void deleteAllValues(HashTableType& collection) | 241 void deleteAllValues(HashTableType& collection) |
| 241 { | 242 { |
| 242 typedef typename HashTableType::const_iterator iterator; | 243 typedef typename HashTableType::const_iterator iterator; |
| 243 iterator end = collection.end(); | 244 iterator end = collection.end(); |
| 244 for (iterator it = collection.begin(); it != end; ++it) | 245 for (iterator it = collection.begin(); it != end; ++it) |
| 245 delete *it; | 246 delete *it; |
| 246 } | 247 } |
| 247 | 248 // Deprecated, HashSet<OwnPtr<>> to be used instead. |
| 248 template<typename T, typename U, typename V, typename W> | 249 template<typename T, typename U, typename V, typename W> |
| 249 inline void deleteAllValues(const HashSet<T, U, V, W>& collection) | 250 inline void deleteAllValues(const HashSet<T, U, V, W>& collection) |
| 250 { | 251 { |
| 251 deleteAllValues<typename HashSet<T, U, V, W>::ValueType>(collection.m_im
pl); | 252 deleteAllValues<typename HashSet<T, U, V, W>::ValueType>(collection.m_im
pl); |
| 252 } | 253 } |
| 253 | 254 |
| 254 template<typename C, typename W> | 255 template<typename C, typename W> |
| 255 inline void copyToVector(const C& collection, W& vector) | 256 inline void copyToVector(const C& collection, W& vector) |
| 256 { | 257 { |
| 257 typedef typename C::const_iterator iterator; | 258 typedef typename C::const_iterator iterator; |
| 258 | 259 |
| 259 vector.resize(collection.size()); | 260 vector.resize(collection.size()); |
| 260 | 261 |
| 261 iterator it = collection.begin(); | 262 iterator it = collection.begin(); |
| 262 iterator end = collection.end(); | 263 iterator end = collection.end(); |
| 263 for (unsigned i = 0; it != end; ++it, ++i) | 264 for (unsigned i = 0; it != end; ++it, ++i) |
| 264 vector[i] = *it; | 265 vector[i] = *it; |
| 265 } | 266 } |
| 266 | 267 |
| 267 } // namespace WTF | 268 } // namespace WTF |
| 268 | 269 |
| 269 using WTF::HashSet; | 270 using WTF::HashSet; |
| 270 | 271 |
| 271 #endif /* WTF_HashSet_h */ | 272 #endif /* WTF_HashSet_h */ |
| OLD | NEW |