summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/wtf/HashCountedSet.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/wtf/HashCountedSet.h')
-rw-r--r--chromium/third_party/WebKit/Source/wtf/HashCountedSet.h166
1 files changed, 42 insertions, 124 deletions
diff --git a/chromium/third_party/WebKit/Source/wtf/HashCountedSet.h b/chromium/third_party/WebKit/Source/wtf/HashCountedSet.h
index edb8a5390bc..2f153ad60ea 100644
--- a/chromium/third_party/WebKit/Source/wtf/HashCountedSet.h
+++ b/chromium/third_party/WebKit/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> ImplType;
+ typedef HashMap<Value, unsigned, HashFunctions, Traits, HashTraits<unsigned>, Allocator> ImplType;
public:
typedef Value ValueType;
typedef typename ImplType::iterator iterator;
@@ -40,132 +46,56 @@ 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 interator to the new value's
+ // the return value is a pair of an iterator to the new value's
// location, and a bool that is true if an new entry was added.
AddResult add(const ValueType&);
// 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.iterator->value;
+ ++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());