HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > Class Template Reference

#include <hashmap.h>

Inheritance diagram for HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >:

Detailed Description

template<typename T, typename HASH = DefaultCompare, typename ENTRY_HANDLER = HashMapKeyValuePair, typename ALLOCATOR = DefaultAllocator, Bool SYNCHRONIZED = false>
class maxon::HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >

A HashSet is an implementation of a set based on hash codes for the elements. Internally, it is just a HashMap with no values. See HashMap for the details of hash code computation, load factors, performance etc.

This example shows the basic usage of HashSet:

HashSet<String> names;
if (!names.Insert("Alice"_s))
... allocation failed ...;
Bool added = false;
if (!names.Insert("Bob"_s, added))
... allocation failed ...;
if (added)
... "Bob" didn't exist before in names ...;
if (names.Contains("Cindy"_s))
... "Cindy" is in the set ...;
names.Erase("Bob"_s);

To iterate over the entries of a HashSet, use Iterator, ConstIterator or a ranged-based for loop:

for (HashSet<String>::ConstIterator i = names.Begin(); i != names.End(); ++i)
{
DiagnosticOutput("Names contains @ ", *i);
}
for (const String& n : names)
{
DiagnosticOutput("Names contains @ ", n);
}
Template Parameters
TType of elements of the set.
HASHClass to be used to compute the hash code of elements, and to compare elements for equality (DefaultCompare by default)
ENTRY_HANDLERUse this class to select the memory layout of entries (either the default HashMapKeyValuePair or HashMapKeyHashValuePair).
ALLOCATORClass for memory allocation.
See also
HashMap
$ref sets

Classes

struct  LambdaEntryConstructor
 

Public Types

using MapType = HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
 
using Super = SetBase< HashSet, T, Protected< MapType >, HASH >
 
using IsHashMap = std::true_type
 
using IsHashSet = std::true_type
 
using Iterator = typename Super::KeyIterator
 
using ConstIterator = typename Super::ConstKeyIterator
 
- Public Types inherited from SetBase0< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > >, HASH >
using SetType = HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
 
- Public Types inherited from Collection< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > > >
using Super = BaseCollection< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > > >
 
using ValueType = T
 
- Public Types inherited from BaseCollection< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > > >
using IsCollection = std::true_type
 

Public Member Functions

 HashSet (const ALLOCATOR &alloc, Float loadFactor=Float(SYNCHRONIZED ? 0 :0.65))
 
 HashSet (Float loadFactor=Float(SYNCHRONIZED ? 0 :0.65))
 
 HashSet (HashSet &&src)
 
 MAXON_OPERATOR_MOVE_ASSIGNMENT (HashSet)
 
UInt GetHashCode () const
 
MapTypeGetMap ()
 
const MapTypeGetMap () const
 
Bool Contains (typename ByValueParam< T >::type value) const
 
template<typename KEY , typename KEYHASH >
Bool Contains (const KEY &key) const
 
void Insert () const
 
ResultRef< typename Super::Entry > Insert (const T &value, Bool &added=BoolLValue())
 
ResultRef< typename Super::Entry > Insert (T &&value, Bool &added=BoolLValue())
 
ResultRef< const T > InsertKey (const T &value, Bool &added=BoolLValue())
 
ResultRef< const T > InsertKey (T &&value, Bool &added=BoolLValue())
 
template<typename KEYHASH = HASH, typename KEY , typename LAMBDA >
Result< Entry * > InsertLambda (KEY &&key, LAMBDA &&lambda)
 
ResultOk< BoolErase (const T &value)
 
ResultOk< void > Erase (const Entry *entry)
 
ConstIterator Begin () const
 
ConstIterator End () const
 
Iterator Begin ()
 
Iterator End ()
 
Iterator Erase (const Iterator &it)
 
- Public Member Functions inherited from SetBase< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > >, HASH >
MAXON_ATTRIBUTE_FORCE_INLINE SetBase (ARGS &&... args)
 
SetImpl< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> ToSet ()
 
SetImpl< const HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> ToSet () const
 
MAXON_ATTRIBUTE_FORCE_INLINE operator SetImpl< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> ()
 
MAXON_ATTRIBUTE_FORCE_INLINE operator SetImpl< const HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> () const
 
- Public Member Functions inherited from SetBase0< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > >, HASH >
MAXON_ATTRIBUTE_FORCE_INLINE SetBase0 (ARGS &&... args)
 
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< const T > Append (typename ByValueParam< T >::type v)
 
Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
 
Result< void > SubtractImpl (COLLECTION2 &&other, OverloadRank0)
 
Bool IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const
 
UInt GetHashCode () const
 
- Public Member Functions inherited from Collection< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > > >
MAXON_ATTRIBUTE_FORCE_INLINE Collection (ARGS &&... args)
 
ResultOk< void > VariadicAppend ()
 
Result< void > VariadicAppend (V &&value, VALUES &&... rest)
 
 operator ValueReceiver< const T &> ()
 
 operator ValueReceiver< T &&> ()
 
 operator ValueReceiver< typename std::conditional< std::is_scalar< T >::value, T, DummyParamType &>::type > ()
 
Result< BoolForEach (FN &&callback)
 
H::Iterator Find (typename ByValueParam< T >::type v)
 
H::ConstIterator Find (typename ByValueParam< T >::type v) const
 
Int FindIndex (typename ByValueParam< T >::type v) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool Contains (typename ByValueParam< T >::type v) const
 
- Public Member Functions inherited from BaseCollection< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > > >
MAXON_ATTRIBUTE_FORCE_INLINE BaseCollection (ARGS &&... args)
 
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator== (const COLLECTION2 &other) const
 
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator!= (const COLLECTION2 &other) const
 
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!std::is_same< typename std::decay< COMPARE >::type, EQUALITY >::value, Bool >::type IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Subtract (COLLECTION2 &&other)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Intersect (const COLLECTION2 &other)
 
Bool Intersects (const COLLECTION2 &other) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0)
 
Result< void > AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0)
 
Result< void > IntersectImpl (COLLECTION2 &&other, OverloadRank0)
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool IsEmpty () const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool IsPopulated () const
 
String ToString (const FormatStatement *formatStatement) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool ContainsAll (COLLECTION2 &&other) const
 
Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
 
- Public Member Functions inherited from Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > >
 __attribute__ ((always_inline)) explicit Protected(ARGS &&... args)
 

Public Attributes

friend MapType
 

Private Member Functions

 MAXON_DISALLOW_COPY_AND_ASSIGN (HashSet)
 

Additional Inherited Members

- Static Public Member Functions inherited from Collection< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > > >
static const T & GetMapKey (const T &key)
 
- Static Public Attributes inherited from SetBase0< HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, Protected< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > >, HASH >
static const COLLECTION_KIND KIND
 
- Protected Types inherited from HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
using Super = MapBase< HashMap, T, UnitType, EmptyClass, HASH >
 
using HashType = HASH
 
using IsHashMap = std::true_type
 
using Iterator = IteratorTemplate< EntryIteratorBase >
 
using ConstIterator = ConstIteratorTemplate< EntryIteratorBase >
 
using KeyIterator = IteratorTemplate< KeyIteratorBase >
 
using ConstKeyIterator = ConstIteratorTemplate< KeyIteratorBase >
 
using ValueIterator = IteratorTemplate< ValueIteratorBase >
 
using ConstValueIterator = ConstIteratorTemplate< ValueIteratorBase >
 
- Protected Types inherited from MapBase0< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, UnitType, EmptyClass, HASH >
using MapType = HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
 
using Super = BaseCollection< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, EmptyClass >
 
using KeyType = T
 
using ValueType = UnitType
 
- Protected Types inherited from BaseCollection< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, EmptyClass >
using IsCollection = std::true_type
 
- Protected Member Functions inherited from HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
Bool ResizeTableImpl (Int length)
 
Entry * AddEntryImpl (Entry *e, Entry *prev, Bool &created, Bool multi, void *)
 
Entry * AddEntryImpl (Entry *e, Entry *prev, Bool &created, Bool multi, Char *)
 
 MAXON_DISALLOW_COPY_AND_ASSIGN (HashMap)
 
const CharGetSignature (void *) const
 
const CharGetSignature (Char *) const
 
 HashMap (Float loadFactor=Float(SYNCHRONIZED ? 0 :0.65))
 
 HashMap (const ALLOCATOR &alloc, Float loadFactor=Float(SYNCHRONIZED ? 0 :0.65))
 
 HashMap (HashMap &&src)
 
 ~HashMap ()
 
 MAXON_OPERATOR_MOVE_ASSIGNMENT (HashMap)
 
ResultMem SetCapacityHint (Int capacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
ResultMem ResizeTable (Int capacity)
 
void Reset ()
 
void Flush ()
 
Int GetCount () const
 
Int GetTableSize () const
 
Int GetMemorySize () const
 
Int GetNonEmptyBucketCount () const
 
Entry * GetNonEmptyBucket (Int i)
 
const Entry * GetNonEmptyBucket (Int i) const
 
Int GetOperationCountForSearch () const
 
SFINAEHelper< Bool, typename MAP::IsHashMap >::type IsEqualImpl (const MAP &other, COMPARE &&cmp, OverloadRank1) const
 
Entry * Find (const KEY &key)
 
const Entry * Find (const KEY &key) const
 
UnitTypeFindValue (const KEY &key)
 
const UnitTypeFindValue (const KEY &key) const
 
Result< Entry *> InsertCtor (KEY &&key, C &&constructor, Bool &created=BoolLValue())
 
ResultRef< Entry > InsertEntry (const T &key, Bool &created=BoolLValue())
 
ResultRef< Entry > InsertEntry (T &&key, Bool &created=BoolLValue())
 
ResultRef< Entry > InsertEntry (KEY &&key, Bool &created=BoolLValue())
 
ResultRef< UnitTypeInsertKey (const T &key, Bool &created=BoolLValue())
 
ResultRef< UnitTypeInsertKey (T &&key, Bool &created=BoolLValue())
 
ResultRef< UnitTypeInsertKey (KEY &&key, Bool &created=BoolLValue())
 
Result< Entry *> InsertLambda (KEY &&key, LAMBDA &&lambda)
 
ResultRef< Entry > Insert (KEY &&key, const UnitType &value, Bool &created=BoolLValue())
 
ResultRef< Entry > Insert (KEY &&key, UnitType &&value, Bool &created=BoolLValue())
 
ResultRef< Entry > InsertMultiEntry (KEY &&key)
 
ResultMem InsertMultiEntry (Entry *e, UInt hash)
 
ResultOk< void > Erase (const Entry *entry, Bool deleteEntry=true)
 
ResultOk< void > Erase (Entry *entry, Bool deleteEntry=true)
 
ResultOk< void > Erase (const Entry &entry, Bool deleteEntry=true)
 
ResultOk< void > Erase (Entry &entry, Bool deleteEntry=true)
 
ResultOk< BoolErase (const KEY &key)
 
IteratorTemplate< SUPER > Erase (const IteratorTemplate< SUPER > &it, Bool deleteEntry=true)
 
void DeleteEntry (const Entry *e)
 
Result< void > IntersectImpl (SET &&set, OverloadRank0)
 
SFINAEHelper< Result< void >, typename std::remove_reference< S >::type::MapType >::type AppendAllImpl (S &&src, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank1)
 
MultiEntryIterator< false > FindAll (const T &key)
 
MultiEntryIterator< true > FindAll (const T &key) const
 
KeyIterator GetKeys ()
 
ConstKeyIterator GetKeys () const
 
ValueIterator GetValues ()
 
ConstValueIterator GetValues () const
 
Iterator Begin ()
 
ConstIterator Begin () const
 
Iterator End ()
 
ConstIterator End () const
 
Iterator GetIterator (const Entry *e)
 
ConstIterator GetIterator (const Entry *e) const
 
SFINAEHelper< String, UnitType >::type ToString (const FormatStatement *formatStatement) const
 
const Entry * FindEntryImpl (UInt hash, const KEY &key) const
 
Entry * FindEntryImpl (UInt hash, const KEY &key)
 
- Protected Member Functions inherited from MapBase< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, UnitType, EmptyClass, HASH >
MAXON_ATTRIBUTE_FORCE_INLINE MapBase (ARGS &&... args)
 
MapImpl< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> ToMap ()
 
MapImpl< const HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> ToMap () const
 
MAXON_ATTRIBUTE_FORCE_INLINE operator MapImpl< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> ()
 
MAXON_ATTRIBUTE_FORCE_INLINE operator MapImpl< const HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &> () const
 
- Protected Member Functions inherited from MapBase0< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, UnitType, EmptyClass, HASH >
MAXON_ATTRIBUTE_FORCE_INLINE MapBase0 (ARGS &&... args)
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool Contains (typename ByValueParam< T >::type key) const
 
MAXON_ATTRIBUTE_FORCE_INLINE SFINAEHelper< Bool, typename PAIR::KeyType >::type Contains (const PAIR &pair) const
 
ResultRef< UnitTypeAppend (const T &key)
 
SFINAEHelper< ResultRef< UnitType >, typename PAIR::KeyType >::type Append (const PAIR &pair)
 
Result< void > Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
Result< void > AppendAllInverse (COLLECTION2 &&other)
 
Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
 
Result< void > SubtractImpl (COLLECTION2 &&other, OverloadRank0)
 
Bool IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const
 
UInt GetHashCode () const
 
- Protected Member Functions inherited from BaseCollection< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, EmptyClass >
MAXON_ATTRIBUTE_FORCE_INLINE BaseCollection (ARGS &&... args)
 
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator== (const COLLECTION2 &other) const
 
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator!= (const COLLECTION2 &other) const
 
MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!std::is_same< typename std::decay< COMPARE >::type, EQUALITY >::value, Bool >::type IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Subtract (COLLECTION2 &&other)
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Intersect (const COLLECTION2 &other)
 
Bool Intersects (const COLLECTION2 &other) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0)
 
Result< void > AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0)
 
Result< void > IntersectImpl (COLLECTION2 &&other, OverloadRank0)
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool IsEmpty () const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool IsPopulated () const
 
String ToString (const FormatStatement *formatStatement) const
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool ContainsAll (COLLECTION2 &&other) const
 
Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
 
- Static Protected Member Functions inherited from HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
static Entry * LoadRelaxed (AtomicPtr< Entry > &e)
 
static Entry * LoadRelaxed (Entry *e)
 
static Entry * LoadAcquire (AtomicPtr< Entry > &e)
 
static Entry * LoadAcquire (Entry *e)
 
static void StoreRelaxed (AtomicPtr< Entry > &e, Entry *newValue)
 
static void StoreRelaxed (Entry *&e, Entry *newValue)
 
static Bool TryCompareAndSwap (AtomicPtr< Entry > &e, Entry *newValue, Entry *compare)
 
static Bool TryCompareAndSwap (Entry *&e, Entry *newValue, Entry *compare)
 
- Static Protected Member Functions inherited from MapBase0< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, UnitType, EmptyClass, HASH >
static const T & GetMapKey (const T &key)
 
static const T & GetMapKey (const PAIR &pair)
 
- Protected Attributes inherited from HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >
ALLOCATOR _allocator
 
Bucket * _table
 
Int _tableLengthM1
 
Bucket ** _nonemptyBuckets
 
Int _nonemptyBucketCount
 
Int _size
 
Int _resizeThreshold
 
const Float _loadFactor
 
- Static Protected Attributes inherited from MapBase0< HashMap< T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >, T, UnitType, EmptyClass, HASH >
static const COLLECTION_KIND KIND
 

Member Typedef Documentation

◆ MapType

using MapType = HashMap<T, UnitType, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED>

◆ Super

using Super = SetBase<HashSet, T, Protected<MapType>, HASH>

◆ IsHashMap

using IsHashMap = std::true_type

◆ IsHashSet

using IsHashSet = std::true_type

◆ Iterator

using Iterator = typename Super::KeyIterator

◆ ConstIterator

using ConstIterator = typename Super::ConstKeyIterator

Constructor & Destructor Documentation

◆ HashSet() [1/3]

HashSet ( const ALLOCATOR &  alloc,
Float  loadFactor = Float(SYNCHRONIZED ? 0 : 0.65) 
)
explicit

Initializes the underlying allocator and constructs a new HashSet with an optional load factor. This will not allocate any memory. Memory allocation can be done explicitly by SetCapacityHint(), or it will be done implicitly when needed.

Parameters
[in]allocUsed to initialize the underlying allocator by its copy constructor.
[in]loadFactorThe load factor of the HashSet.

◆ HashSet() [2/3]

HashSet ( Float  loadFactor = Float(SYNCHRONIZED ? 0 : 0.65))
explicit

Constructs a new HashSet with an optional load factor. This will not allocate any memory. Memory allocation can be done explicitly by SetCapacityHint(), or it will be done implicitly when needed.

Parameters
[in]loadFactorThe load factor of the HashSet.

◆ HashSet() [3/3]

HashSet ( HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED > &&  src)

Member Function Documentation

◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >  )
private

◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

MAXON_OPERATOR_MOVE_ASSIGNMENT ( HashSet< T, HASH, ENTRY_HANDLER, ALLOCATOR, SYNCHRONIZED >  )

◆ GetHashCode()

UInt GetHashCode ( ) const

◆ GetMap() [1/2]

MapType& GetMap ( )

◆ GetMap() [2/2]

const MapType& GetMap ( ) const

◆ Contains() [1/2]

Bool Contains ( typename ByValueParam< T >::type  value) const

Checks if this set contains value.

Parameters
[in]valueThe value to check.
Returns
True if this set contains value.

◆ Contains() [2/2]

Bool Contains ( const KEY &  key) const

Checks if this set contains key. The type KEY of the given key need not be the same as V, but then you have to provide an additional class KEYHASH to compute the hash code of the specified key (function KEYHASH::GetHashCode(const KEY&)), and to compare a key of type KEY with a key of type V for equality (function KEYHASH::IsEqual(const KEY&, const V&)) unless the default HASH class is already able to do so.

Template Parameters
KEYHASHHash class to compute the hash code of key, and to compare key with the map's keys. Default is HASH.
KEYType of key.
Parameters
[in]keyThe value to check.
Returns
True if this set contains value.

◆ Insert() [1/3]

void Insert ( ) const

◆ Insert() [2/3]

ResultRef<typename Super::Entry> Insert ( const T &  value,
Bool added = BoolLValue() 
)

Adds value to this set. If value is already contained in this set, nothing happens, and added is set to false.

Parameters
[in]valueValue to add to this set.
[out]addedThis will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false.
Returns
Element reference or OutOfMemoryError if the allocation failed.

◆ Insert() [3/3]

ResultRef<typename Super::Entry> Insert ( T &&  value,
Bool added = BoolLValue() 
)

Adds value to this set. If value is already contained in this set, nothing happens, and added is set to false.

Parameters
[in]valueValue to add to this set. When a new element has to be added, value will be moved into the new element.
[out]addedThis will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false.
Returns
Element reference or OutOfMemoryError if the allocation failed.

◆ InsertKey() [1/2]

ResultRef<const T> InsertKey ( const T &  value,
Bool added = BoolLValue() 
)

Adds value to this set. If value is already contained in this set, nothing happens, and added is set to false.

Parameters
[in]valueValue to add to this set.
[out]addedThis will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false.
Returns
Pointer to the value in the set, or nullptr if the element had to be added, but the allocation failed.

◆ InsertKey() [2/2]

ResultRef<const T> InsertKey ( T &&  value,
Bool added = BoolLValue() 
)

Adds value to this set. If value is already contained in this set, nothing happens, and added is set to false.

Parameters
[in]valueValue to add to this set. When a new element has to be added, value will be moved into the new element.
[out]addedThis will be set to true if the element didn't exist before in the set and it could be added successfully, otherwise it will be set to false.
Returns
Pointer to the value in the set, or nullptr if the element had to be added, but the allocation failed.

◆ InsertLambda()

Result<Entry*> InsertLambda ( KEY &&  key,
LAMBDA &&  lambda 
)

Adds an entry corresponding to the given key if such an entry doesn't exist yet. If a new entry has to be created, the passed lambda function is invoked with the key as first argument and the value (of type T&) of the newly created entry as second argument. The lambda then has to initialize the value correctly. The lambda function has to return Result<void>.

The type KEY of the given key need not be the same as T, but then you have to provide an additional class KEYHASH to compute the hash code of the specified key (function KEYHASH::GetHashCode(const KEY&)), and to compare a key of type KEY with a key of type T for equality (function KEYHASH::IsEqual(const KEY&, const T&)) unless the default HASH class is already able to do so.

Template Parameters
KEYHASHHash class to compute the hash code of key, and to compare key with the map's keys. Default is HASH.
KEYType of key.
LAMBDAType of the function.
Parameters
[in]keyKey of the entry to find or create.
[in]lambdaThe function which will be invoked as return lambda(key, value); to initialize the value of a newly created entry.
Returns
Entry for the given key, or nullptr if the entry didn't exist and allocation of a new entry failed.

◆ Erase() [1/3]

ResultOk<Bool> Erase ( const T &  value)

Remove value from this set. If value isn't contained in this set, nothing happens.

Parameters
[in]valueValue to remove from this set.
Returns
True if an entry was found and removed for #value, otherwise false.

◆ Erase() [2/3]

ResultOk<void> Erase ( const Entry *  entry)

◆ Begin() [1/2]

ConstIterator Begin ( ) const

◆ End() [1/2]

ConstIterator End ( ) const

◆ Begin() [2/2]

Iterator Begin ( )

◆ End() [2/2]

Iterator End ( )

◆ Erase() [3/3]

Iterator Erase ( const Iterator it)

Member Data Documentation

◆ MapType

friend MapType