24 #include "FastAllocBase.h"
25 #include "HashTable.h"
29 template<
typename Value,
typename HashFunctions,
typename Traits>
class HashSet;
30 template<
typename Value,
typename HashFunctions,
typename Traits>
32 template<
typename Value,
typename HashFunctions,
typename Traits>
37 template<typename ValueArg, typename HashArg = typename DefaultHash<ValueArg>::Hash,
38 typename TraitsArg = HashTraits<ValueArg> >
class HashSet {
39 WTF_MAKE_FAST_ALLOCATED;
41 typedef HashArg HashFunctions;
42 typedef TraitsArg ValueTraits;
48 typedef HashTable<ValueType, ValueType, IdentityExtractor<ValueType>,
49 HashFunctions, ValueTraits, ValueTraits> HashTableType;
52 typedef HashTableConstIteratorAdapter<HashTableType, ValueType>
iterator;
53 typedef HashTableConstIteratorAdapter<HashTableType, ValueType>
const_iterator;
61 iterator
begin()
const;
64 iterator
find(
const ValueType&)
const;
65 bool contains(
const ValueType&)
const;
72 template<
typename T,
typename HashTranslator> iterator
find(
const T&)
const;
73 template<
typename T,
typename HashTranslator>
bool contains(
const T&)
const;
77 pair<iterator, bool>
add(
const ValueType&);
85 template<
typename T,
typename HashTranslator> pair<iterator, bool>
add(
const T&);
87 void remove(
const ValueType&);
92 friend void deleteAllValues<>(
const HashSet&);
93 friend void fastDeleteAllValues<>(
const HashSet&);
102 template<
typename ValueType,
typename ValueTraits,
typename T,
typename Translator>
104 static unsigned hash(
const T& key) {
return Translator::hash(key); }
105 static bool equal(
const ValueType&
a,
const T&
b) {
return Translator::equal(a, b); }
108 Translator::translate(location, key, hashCode);
112 template<
typename T,
typename U,
typename V>
115 m_impl.swap(other.m_impl);
118 template<
typename T,
typename U,
typename V>
121 return m_impl.size();
124 template<
typename T,
typename U,
typename V>
127 return m_impl.capacity();
130 template<
typename T,
typename U,
typename V>
133 return m_impl.isEmpty();
136 template<
typename T,
typename U,
typename V>
139 return m_impl.begin();
142 template<
typename T,
typename U,
typename V>
148 template<
typename T,
typename U,
typename V>
151 return m_impl.find(value);
154 template<
typename T,
typename U,
typename V>
157 return m_impl.contains(value);
160 template<
typename Value,
typename HashFunctions,
typename Traits>
161 template<
typename T,
typename HashTranslator>
166 return m_impl.template find<T, Adapter>(
value);
169 template<
typename Value,
typename HashFunctions,
typename Traits>
170 template<
typename T,
typename HashTranslator>
185 template<
typename T,
typename U,
typename V>
189 auto& temp = m_impl.add(value);
190 return make_pair((iter_type)temp.first, temp.second);
204 template<
typename Value,
typename HashFunctions,
typename Traits>
205 template<
typename T,
typename HashTranslator>
206 inline pair<typename HashSet<Value, HashFunctions, Traits>::iterator,
bool>
211 auto& temp = m_impl.template addPassingHashCode<T, T, Adapter>(
value,
value);
212 return make_pair((iter_type)temp.first, temp.second);
215 template<
typename T,
typename U,
typename V>
218 if (it.m_impl == m_impl.end())
220 m_impl.internalCheckTableConsistency();
221 m_impl.removeWithoutEntryConsistencyCheck(it.m_impl);
224 template<
typename T,
typename U,
typename V>
230 template<
typename T,
typename U,
typename V>
236 template<
typename ValueType,
typename HashTableType>
239 typedef typename HashTableType::const_iterator iterator;
240 iterator
end = collection.end();
241 for (iterator it = collection.begin(); it !=
end; ++it)
245 template<
typename T,
typename U,
typename V>
248 deleteAllValues<typename HashSet<T, U, V>::ValueType>(collection.m_impl);
251 template<
typename ValueType,
typename HashTableType>
254 typedef typename HashTableType::const_iterator iterator;
255 iterator
end = collection.end();
256 for (iterator it = collection.begin(); it !=
end; ++it)
260 template<
typename T,
typename U,
typename V>
263 fastDeleteAllValues<typename HashSet<T, U, V>::ValueType>(collection.m_impl);
266 template<
typename T,
typename U,
typename V,
typename W>
271 vector.resize(collection.
size());
273 iterator it = collection.
begin();
274 iterator
end = collection.
end();
275 for (
unsigned i = 0; it !=
end; ++it, ++i)
void deleteAllValues(const HashSet< Value, HashFunctions, Traits > &)
HashTableConstIteratorAdapter< HashTableType, ValueType > iterator
Definition: HashSet.h:52
static unsigned hash(const T &key)
Definition: HashSet.h:104
pair< iterator, bool > add(const ValueType &)
Definition: HashSet.h:186
ValueTraits::TraitType ValueType
Definition: HashSet.h:45
HashTableConstIteratorAdapter< HashTableType, ValueType > const_iterator
Definition: HashSet.h:53
GLint location
Definition: glew.h:1819
int capacity() const
Definition: HashSet.h:125
Definition: HashSet.h:103
GLdouble GLdouble t
Definition: glew.h:1382
void copyToVector(const HashSet< T, U, V > &collection, W &vector)
Definition: HashSet.h:267
GLdouble GLdouble GLdouble b
Definition: glew.h:7885
GLuint GLuint end
Definition: glew.h:1237
bool contains(const ValueType &) const
Definition: HashSet.h:155
iterator find(const ValueType &) const
Definition: HashSet.h:149
GLsizei const GLfloat * value
Definition: glew.h:1833
void swap(HashSet &)
Definition: HashSet.h:113
GLboolean GLboolean GLboolean GLboolean a
Definition: glew.h:8272
int size() const
Definition: HashSet.h:119
void clear()
Definition: HashSet.h:231
void remove(const ValueType &)
Definition: HashSet.h:225
static bool equal(const ValueType &a, const T &b)
Definition: HashSet.h:105
iterator begin() const
Definition: HashSet.h:137
void fastDeleteAllValues(const HashSet< Value, HashFunctions, Traits > &)
iterator end() const
Definition: HashSet.h:143
bool isEmpty() const
Definition: HashSet.h:131
static void translate(ValueType &location, const T &key, const T &, unsigned hashCode)
Definition: HashSet.h:106