Index: Source/wtf/HashCountedSet.h |
diff --git a/Source/wtf/HashCountedSet.h b/Source/wtf/HashCountedSet.h |
index 18dbd321079c2746d64cb984e8af09b73d6f0aab..2f153ad60ea0b134648fa9b798fb9974821e4a2e 100644 |
--- a/Source/wtf/HashCountedSet.h |
+++ b/Source/wtf/HashCountedSet.h |
@@ -27,11 +27,17 @@ |
namespace WTF { |
- template<typename Value, typename HashFunctions = typename DefaultHash<Value>::Hash, |
- typename Traits = HashTraits<Value> > class HashCountedSet { |
- WTF_MAKE_FAST_ALLOCATED; |
+ // An unordered hash set that keeps track of how many times you added an |
+ // item to the set. The iterators have fields ->key and ->value that return |
+ // the set members and their counts, respectively. |
+ template< |
+ typename Value, |
+ typename HashFunctions = typename DefaultHash<Value>::Hash, |
+ typename Traits = HashTraits<Value>, |
+ typename Allocator = DefaultAllocator > class HashCountedSet { |
+ WTF_USE_ALLOCATOR(HashCountedSet, Allocator); |
private: |
- typedef HashMap<Value, unsigned, HashFunctions, Traits, HashTraits<unsigned>, DefaultAllocator> ImplType; |
+ typedef HashMap<Value, unsigned, HashFunctions, Traits, HashTraits<unsigned>, Allocator> ImplType; |
public: |
typedef Value ValueType; |
typedef typename ImplType::iterator iterator; |
@@ -40,22 +46,22 @@ namespace WTF { |
HashCountedSet() {} |
- void swap(HashCountedSet&); |
+ void swap(HashCountedSet& other) { m_impl.swap(other.m_impl); } |
- unsigned size() const; |
- unsigned capacity() const; |
- bool isEmpty() const; |
+ unsigned size() const { return m_impl.size(); } |
+ unsigned capacity() const { return m_impl.capacity(); } |
+ bool isEmpty() const { return m_impl.isEmpty(); } |
- // Iterators iterate over pairs of values and counts. |
- iterator begin(); |
- iterator end(); |
- const_iterator begin() const; |
- const_iterator end() const; |
+ // Iterators iterate over pairs of values (called key) and counts (called value). |
+ iterator begin() { return m_impl.begin(); } |
+ iterator end() { return m_impl.end(); } |
+ const_iterator begin() const { return m_impl.begin(); } |
+ const_iterator end() const { return m_impl.end(); } |
- iterator find(const ValueType&); |
- const_iterator find(const ValueType&) const; |
- bool contains(const ValueType&) const; |
- unsigned count(const ValueType&) const; |
+ iterator find(const ValueType& value) { return m_impl.find(value); } |
+ const_iterator find(const ValueType& value) const { return m_impl.find(value); } |
+ bool contains(const ValueType& value ) const { return m_impl.contains(value); } |
+ unsigned count(const ValueType& value ) const { return m_impl.get(value); } |
// Increases the count if an equal value is already present |
// the return value is a pair of an iterator to the new value's |
@@ -64,108 +70,32 @@ namespace WTF { |
// Reduces the count of the value, and removes it if count |
// goes down to zero, returns true if the value is removed. |
- bool remove(const ValueType&); |
+ bool remove(const ValueType& value) { return remove(find(value)); } |
bool remove(iterator); |
// Removes the value, regardless of its count. |
+ void removeAll(const ValueType& value) { removeAll(find(value)); } |
void removeAll(iterator); |
- void removeAll(const ValueType&); |
// Clears the whole set. |
- void clear(); |
+ void clear() { m_impl.clear(); } |
+ |
+ void trace(typename Allocator::Visitor* visitor) { m_impl.trace(visitor); } |
private: |
ImplType m_impl; |
}; |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline void HashCountedSet<Value, HashFunctions, Traits>::swap(HashCountedSet& other) |
- { |
- m_impl.swap(other.m_impl); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline unsigned HashCountedSet<Value, HashFunctions, Traits>::size() const |
- { |
- return m_impl.size(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline unsigned HashCountedSet<Value, HashFunctions, Traits>::capacity() const |
- { |
- return m_impl.capacity(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline bool HashCountedSet<Value, HashFunctions, Traits>::isEmpty() const |
- { |
- return size() == 0; |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::iterator HashCountedSet<Value, HashFunctions, Traits>::begin() |
- { |
- return m_impl.begin(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::iterator HashCountedSet<Value, HashFunctions, Traits>::end() |
- { |
- return m_impl.end(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator HashCountedSet<Value, HashFunctions, Traits>::begin() const |
- { |
- return m_impl.begin(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator HashCountedSet<Value, HashFunctions, Traits>::end() const |
- { |
- return m_impl.end(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::iterator HashCountedSet<Value, HashFunctions, Traits>::find(const ValueType& value) |
- { |
- return m_impl.find(value); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator HashCountedSet<Value, HashFunctions, Traits>::find(const ValueType& value) const |
- { |
- return m_impl.find(value); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline bool HashCountedSet<Value, HashFunctions, Traits>::contains(const ValueType& value) const |
- { |
- return m_impl.contains(value); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline unsigned HashCountedSet<Value, HashFunctions, Traits>::count(const ValueType& value) const |
- { |
- return m_impl.get(value); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline typename HashCountedSet<Value, HashFunctions, Traits>::AddResult HashCountedSet<Value, HashFunctions, Traits>::add(const ValueType &value) |
+ template<typename T, typename U, typename V, typename W> |
+ inline typename HashCountedSet<T, U, V, W>::AddResult HashCountedSet<T, U, V, W>::add(const ValueType& value) |
{ |
AddResult result = m_impl.add(value, 0); |
++result.storedValue->value; |
return result; |
} |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline bool HashCountedSet<Value, HashFunctions, Traits>::remove(const ValueType& value) |
- { |
- return remove(find(value)); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline bool HashCountedSet<Value, HashFunctions, Traits>::remove(iterator it) |
+ template<typename T, typename U, typename V, typename W> |
+ inline bool HashCountedSet<T, U, V, W>::remove(iterator it) |
{ |
if (it == end()) |
return false; |
@@ -182,14 +112,8 @@ namespace WTF { |
return true; |
} |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline void HashCountedSet<Value, HashFunctions, Traits>::removeAll(const ValueType& value) |
- { |
- removeAll(find(value)); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline void HashCountedSet<Value, HashFunctions, Traits>::removeAll(iterator it) |
+ template<typename T, typename U, typename V, typename W> |
+ inline void HashCountedSet<T, U, V, W>::removeAll(iterator it) |
{ |
if (it == end()) |
return; |
@@ -197,16 +121,10 @@ namespace WTF { |
m_impl.remove(it); |
} |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline void HashCountedSet<Value, HashFunctions, Traits>::clear() |
- { |
- m_impl.clear(); |
- } |
- |
- template<typename Value, typename HashFunctions, typename Traits, typename VectorType> |
- inline void copyToVector(const HashCountedSet<Value, HashFunctions, Traits>& collection, VectorType& vector) |
+ template<typename T, typename U, typename V, typename W, typename VectorType> |
+ inline void copyToVector(const HashCountedSet<T, U, V, W>& collection, VectorType& vector) |
{ |
- typedef typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator iterator; |
+ typedef typename HashCountedSet<T, U, V, W>::const_iterator iterator; |
vector.resize(collection.size()); |
@@ -216,10 +134,10 @@ namespace WTF { |
vector[i] = *it; |
} |
- template<typename Value, typename HashFunctions, typename Traits> |
- inline void copyToVector(const HashCountedSet<Value, HashFunctions, Traits>& collection, Vector<Value>& vector) |
+ template<typename Value, typename HashFunctions, typename Traits, typename Allocator, size_t inlineCapacity, typename VectorAllocator> |
+ inline void copyToVector(const HashCountedSet<Value, HashFunctions, Traits, Allocator>& collection, Vector<Value, inlineCapacity, VectorAllocator>& vector) |
{ |
- typedef typename HashCountedSet<Value, HashFunctions, Traits>::const_iterator iterator; |
+ typedef typename HashCountedSet<Value, HashFunctions, Traits, Allocator>::const_iterator iterator; |
vector.resize(collection.size()); |