65 #ifndef Foam_HashSet_H 66 #define Foam_HashSet_H 77 template<
class T>
class MinMax;
78 template<
class Key,
class Hash>
class HashSet;
93 template<
class Key,
class Hash=Foam::Hash<Key>>
101 template<
class InputIter>
102 inline label assignMany
169 HashSet(std::initializer_list<Key> list);
173 template<
class AnyType,
class AnyHash>
181 bool test(
const Key&
key)
const 198 bool set(
const Key&
key)
225 template<
class InputIter>
226 inline label
insert(InputIter first, InputIter last);
230 inline label
insert(std::initializer_list<Key> list);
247 template<
class InputIter>
248 inline label
set(InputIter first, InputIter last)
250 return insert(first, last);
254 inline label
set(std::initializer_list<Key> list)
261 inline label
set(
const FixedList<Key, N>& list)
267 inline label
set(
const UList<Key>& list)
274 inline label
set(
const IndirectListBase<Key, Addr>& list)
281 template<
class InputIter>
282 inline label
setMany(InputIter first, InputIter last)
284 return insert(first, last);
289 template<
class InputIter>
290 inline label
unset(InputIter first, InputIter last);
294 inline label
unset(std::initializer_list<Key> list);
299 inline label
unset(
const FixedList<Key, N>& list);
303 inline label
unset(
const UList<Key>& list);
308 inline label
unset(
const IndirectListBase<Key, Addr>& list);
375 void operator=(std::initializer_list<Key> rhs);
399 template<
class UnaryPredicate>
403 template<
class BinaryPredicate>
407 template<
class UnaryPredicate>
408 label
countValues(
const UnaryPredicate&,
const bool) =
delete;
411 template<
class BinaryPredicate>
412 label
countEntries(
const BinaryPredicate&,
const bool) =
delete;
415 template<
class UnaryPredicate>
416 label
filterValues(
const UnaryPredicate&,
const bool) =
delete;
419 template<
class BinaryPredicate>
420 label
filterEntries(
const BinaryPredicate&,
const bool) =
delete;
443 template<
class Key,
class Hash>
444 Ostream& operator<<(Ostream& os, const HashSet<Key, Hash>& rhs);
449 template<
class Key,
class Hash>
458 template<
class Key,
class Hash>
467 template<
class Key,
class Hash>
476 template<
class Key,
class Hash>
A HashTable with keys but without contents that is similar to std::unordered_set. ...
List< Key > tocEntries(const BinaryPredicate &, const bool)=delete
Not applicable for HashSet.
this_type & operator^=(const this_type &rhs)
Only retain unique entries (xor)
bool emplace(const Key &key, Args &&... args)
Emplace insert a new entry, not overwriting existing entries.
A 1D vector of objects of type <T> with a fixed length <N>.
label filterValues(const UnaryPredicate &, const bool)=delete
Not applicable for HashSet.
bool operator()(const Key &key) const noexcept
Return true if the entry exists, same as contains()
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
bool test(const Key &key) const
Same as contains() - return true if key exists in the set.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
A min/max value pair with additional methods. In addition to conveniently storing values...
Ostream & writeList(Ostream &os, const label shortLen=0) const
Write unordered keys (list), with line-breaks when length exceeds shortLen.
bool operator==(const this_type &rhs) const
Sets are equal if all keys are equal, independent of order or underlying storage size.
this_type & operator|=(const this_type &rhs)
Add entries to this HashSet.
void operator=(const this_type &rhs)
Copy assign.
constexpr const_iterator cend() const noexcept
void merge(HashSet< Key, Hash > &source)
Attempts to extract entries from source parameter and insert them into this, does not overwrite exist...
bool insert(const Key &key)
Insert a new entry, not overwriting existing entries.
Base for lists with indirect addressing, templated on the list contents type and the addressing type...
HashSet()
Default construct with default (128) table capacity.
label filterEntries(const BinaryPredicate &, const bool)=delete
Not applicable for HashSet.
MinMax< label > minMax(const labelHashSet &set)
Find the min/max values of labelHashSet.
HashSet< label, Hash< label > > labelHashSet
A HashSet of labels, uses label hasher.
label size() const noexcept
The number of elements in table.
key_iterator_base< iterator > key_iterator
Forward iterator returning the key.
bool unset(const Key &key)
Unset the specified key - same as erase.
bool contains(const Key &key) const
True if hashed key is contained (found) in table.
Ostream & writeKeys(Ostream &os, const label shortLen=0) const
Write unordered keys (list), with line-breaks when length exceeds shortLen.
const dimensionedScalar b
Wien displacement law constant: default SI units: [m.K].
void operator=(const this_type &rhs)
Copy assign.
this_type & operator-=(const this_type &rhs)
Remove entries from this HashSet. Uses erase()
HashSet< word, Hash< word > > wordHashSet
A HashSet of words, uses string hasher.
A HashTable similar to std::unordered_map.
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
An Ostream is an abstract base class for all output systems (streams, files, token lists...
key_iterator_base< const_iterator > const_key_iterator
Forward const iterator returning the key.
OBJstream os(runTime.globalPath()/outputName)
label setMany(InputIter first, InputIter last)
Same as insert (no value to overwrite)
label countValues(const UnaryPredicate &, const bool)=delete
Not applicable for HashSet.
bool erase(const iterator &iter)
Erase an entry specified by given iterator.
this_type & operator &=(const this_type &rhs)
Only retain entries contained in both HashSets.
typename parent_type::key_iterator iterator
An iterator, returning reference to the key.
List< Key > tocValues(const UnaryPredicate &, const bool)=delete
Not applicable for HashSet.
auto key(const Type &t) -> typename std::enable_if< std::is_enum< Type >::value, typename std::underlying_type< Type >::type >::type
label countEntries(const BinaryPredicate &, const bool)=delete
Not applicable for HashSet.
HashTable< Foam::zero, Key, Hash > parent_type
The template instance used for the parent HashTable.
HashSet< Key, Hash > this_type
The template instance used for this HashSet.
bool operator[](const Key &key) const noexcept
Return true if the entry exists, same as contains().
this_type & operator+=(const this_type &rhs)
Add entries to this HashSet. Same as the '|=' operator.
typename parent_type::const_key_iterator const_iterator
A const_iterator, returning reference to the key.
const_iterator cbegin() const
bool operator!=(const this_type &rhs) const
The opposite of the equality operation.