Open Search
    HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > Class Template Reference

    #include <hybridmap.h>

    Inheritance diagram for HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >:

    Detailed Description

    template<typename T, typename SMALL, typename LARGE, Int THRESHOLD, Int REVERSE_THRESHOLD>
    class maxon::HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >

    A HybridSet is an implementation of a set using an underlying HybridMap.

    See HashSet for more examples on how to use sets in general.

    Template Parameters
    TType of elements of the set.
    SMALLA map selector template to choose the map implementation to use for a small number of entries.
    LARGEA map selector template to choose the map implementation to use for a large number of entries.
    THRESHOLDWhen the number of entries reaches THRESHOLD, HybridMap switches to the LARGE implementation.
    REVERSE_THRESHOLDWhen the number of entries falls below REVERSE_THRESHOLD, HybridMap switches back to the SMALL implementation. If this is negative, this will never happen.
    See also
    HybridMap
    $ref sets

    Public Types

    using MapType = HybridMap< T, UnitType, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >
     
    using Super = SetBase< HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >, T, Protected< MapType >, DefaultCompare >
     
    using IsHybridMap = std::true_type
     
    using IsHybridSet = std::true_type
     
    using Iterator = typename Super::KeyIterator
     
    using ConstIterator = typename Super::ConstKeyIterator
     
    - Public Types inherited from SetBase0< COLLECTION, VALUETYPE, SUPER, HASH >
    using SetType = COLLECTION
     
    - Public Types inherited from Collection< COLLECTION, VALUETYPE, SUPER >
    using Super = BaseCollection< COLLECTION, SUPER >
     
    using ValueType = VALUETYPE
     
    - Public Types inherited from BaseCollection< COLLECTION, SUPER >
    using IsCollection = std::true_type
     
    using IsBaseArray = std::false_type
     

    Public Member Functions

     HybridSet ()
     
     HybridSet (HybridSet &&src)
     
     MAXON_OPERATOR_MOVE_ASSIGNMENT (HybridSet)
     
    MapTypeGetMap ()
     
    const MapTypeGetMap () const
     
    Bool Contains (typename ByValueParam< T >::type value) const
     
    void Insert () const
     
    ResultMemT< IteratorInsert (const T &value, Bool &added=BoolLValue())
     
    ResultMemT< IteratorInsert (T &&value, Bool &added=BoolLValue())
     
    ResultRef< const T > InsertKey (const T &value, Bool &added=BoolLValue())
     
    ResultRef< const T > InsertKey (T &&value, Bool &added=BoolLValue())
     
    Result< BoolErase (const T &value)
     
    ConstIterator Begin () const
     
    ConstIterator End () const
     
    Iterator Begin ()
     
    Iterator End ()
     
    Iterator Erase (const Iterator &it)
     
    template<typename KEY = K>
    Iterator Find (const KEY &key)
     
    template<typename KEY = K>
    ConstIterator Find (const KEY &key) const
     
    Int GetCount () const
     
    Int GetOperationCountForSearch () const
     
    ResultMem SetCapacityHint (Int capacity, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
     
    void Reset ()
     
    void Flush ()
     
    Int GetMemorySize () const
     
    - Public Member Functions inherited from SetBase< HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >, T, Protected< HybridMap< T, UnitType, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > >, DefaultCompare >
    MAXON_ATTRIBUTE_FORCE_INLINE SetBase (ARGS &&... args)
     
    SetImpl< HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > ToSet ()
     
    SetImpl< const HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > ToSet () const
     
    MAXON_ATTRIBUTE_FORCE_INLINE operator SetImpl< HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > ()
     
    MAXON_ATTRIBUTE_FORCE_INLINE operator SetImpl< const HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > & > () const
     
    - Public Member Functions inherited from SetBase0< COLLECTION, VALUETYPE, SUPER, HASH >
    template<typename... ARGS>
    MAXON_ATTRIBUTE_FORCE_INLINE SetBase0 (ARGS &&... args)
     
    MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< const VALUETYPEAppend (typename ByValueParam< VALUETYPE >::type v)
     
    template<typename COLLECTION2 >
    Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Add (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
     
    template<typename COLLECTION2 >
    Result< void > SubtractImpl (COLLECTION2 &&other, OverloadRank0)
     
    template<typename COLLECTION2 , typename COMPARE >
    Bool IsEqualImpl (const COLLECTION2 &other, COMPARE &&cmp, OverloadRank0) const
     
    HashInt GetHashCode () const
     
    UniqueHash GetUniqueHashCode () const
     
    - Public Member Functions inherited from Collection< COLLECTION, VALUETYPE, SUPER >
    template<typename... ARGS>
    MAXON_ATTRIBUTE_FORCE_INLINE Collection (ARGS &&... args)
     
    ResultOk< void > VariadicAppend ()
     
    template<typename V , typename... VALUES>
    Result< void > VariadicAppend (V &&value, VALUES &&... rest)
     
     operator ValueReceiver< const VALUETYPE & > ()
     
     operator ValueReceiver< VALUETYPE && > ()
     
     operator ValueReceiver< typename std::conditional< STD_IS_REPLACEMENT (scalar, VALUETYPE)
     
    DummyParamType & type ()
     
    template<typename FN >
    Result< BoolForEach (FN &&callback) const
     
    template<typename FN >
    Result< BoolForEach (FN &&callback)
     
    template<typename H = COLLECTION>
    H::Iterator Find (typename ByValueParam< VALUETYPE >::type v)
     
    template<typename H = COLLECTION>
    H::ConstIterator Find (typename ByValueParam< VALUETYPE >::type v) const
     
    Int FindIndex (typename ByValueParam< VALUETYPE >::type v) const
     
    MAXON_ATTRIBUTE_FORCE_INLINE Bool Contains (typename ByValueParam< VALUETYPE >::type v) const
     
    - Public Member Functions inherited from BaseCollection< COLLECTION, SUPER >
    template<typename... ARGS>
    MAXON_ATTRIBUTE_FORCE_INLINE BaseCollection (ARGS &&... args)
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator== (const COLLECTION2 &other) const
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value, Bool >::type operator!= (const COLLECTION2 &other) const
     
    template<typename COMPARE = EqualityCompare, typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if< maxon::IsCollection< COLLECTION2 >::value &&!STD_IS_REPLACEMENT(same, typename std::decay< COMPARE >::type, EQUALITY), Bool >::type IsEqual (const COLLECTION2 &other, COMPARE &&cmp=COMPARE()) const
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > AppendAll (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::ON_GROW_RESERVE_CAPACITY)
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFrom (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Subtract (COLLECTION2 &&other)
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > Intersect (const COLLECTION2 &other)
     
    template<typename COLLECTION2 >
    Bool Intersects (const COLLECTION2 &other) const
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Result< void > CopyFromImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, OverloadRank0)
     
    template<typename COLLECTION2 >
    Result< void > AppendAllImpl (COLLECTION2 &&other, COLLECTION_RESIZE_FLAGS resizeFlags, Bool overwrite, OverloadRank0)
     
    template<typename COLLECTION2 >
    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=nullptr) const
     
    template<typename COLLECTION2 >
    MAXON_ATTRIBUTE_FORCE_INLINE Bool ContainsAll (COLLECTION2 &&other) const
     
    template<typename COLLECTION2 >
    Bool ContainsAllImpl (COLLECTION2 &&other, OverloadRank0) const
     

    Public Attributes

    friend MapType
     
    - Public Attributes inherited from Collection< COLLECTION, VALUETYPE, SUPER >
     VALUETYPE
     

    Private Member Functions

     MAXON_DISALLOW_COPY_AND_ASSIGN (HybridSet)
     

    Additional Inherited Members

    - Static Public Member Functions inherited from Collection< COLLECTION, VALUETYPE, SUPER >
    static const VALUETYPEGetMapKey (const VALUETYPE &key)
     
    - Static Public Attributes inherited from SetBase0< COLLECTION, VALUETYPE, SUPER, HASH >
    static const COLLECTION_KIND KIND
     

    Member Typedef Documentation

    ◆ MapType

    using MapType = HybridMap<T, UnitType, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD>

    ◆ Super

    using Super = SetBase<HybridSet<T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD>, T, Protected<MapType>, DefaultCompare>

    ◆ IsHybridMap

    using IsHybridMap = std::true_type

    ◆ IsHybridSet

    using IsHybridSet = std::true_type

    ◆ Iterator

    using Iterator = typename Super::KeyIterator

    ◆ ConstIterator

    using ConstIterator = typename Super::ConstKeyIterator

    Constructor & Destructor Documentation

    ◆ HybridSet() [1/2]

    HybridSet ( )

    ◆ HybridSet() [2/2]

    HybridSet ( HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD > &&  src)

    Member Function Documentation

    ◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

    MAXON_DISALLOW_COPY_AND_ASSIGN ( HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >  )
    private

    ◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

    MAXON_OPERATOR_MOVE_ASSIGNMENT ( HybridSet< T, SMALL, LARGE, THRESHOLD, REVERSE_THRESHOLD >  )

    ◆ GetMap() [1/2]

    MapType& GetMap ( )

    ◆ GetMap() [2/2]

    const MapType& GetMap ( ) const

    ◆ Contains()

    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.

    ◆ Insert() [1/3]

    void Insert ( ) const

    ◆ Insert() [2/3]

    ResultMemT<Iterator> 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
    Iterator to the entry for the given key or OutOfMemoryError if the allocation failed.

    ◆ Insert() [3/3]

    ResultMemT<Iterator> 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
    Iterator to the entry for the given key 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.

    ◆ Erase() [1/2]

    Result<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 or an error if a memory allocation failed.

    ◆ Begin() [1/2]

    ConstIterator Begin ( ) const

    ◆ End() [1/2]

    ConstIterator End ( ) const

    ◆ Begin() [2/2]

    Iterator Begin ( )

    ◆ End() [2/2]

    Iterator End ( )

    ◆ Erase() [2/2]

    Iterator Erase ( const Iterator it)

    ◆ Find() [1/2]

    Iterator Find ( typename KEY  = K)

    Finds the entry for the given key in this map.

    Parameters
    [in]keyKey to search for.
    Returns
    Iterator pointing to the entry with the given key, or an invalid iterator if this doesn't exist.

    ◆ Find() [2/2]

    ConstIterator Find ( typename KEY  = K)

    Finds the entry for the given key in this map.

    Parameters
    [in]keyKey to search for.
    Returns
    Iterator pointing to the entry with the given key, or an invalid iterator if this doesn't exist.

    ◆ GetCount()

    Int GetCount

    Returns the number of entries in this map.

    Returns
    Number of entries.

    ◆ GetOperationCountForSearch()

    Int GetOperationCountForSearch

    Returns an estimate of the number of operations needed to locate a given key in this map. This is used when two collections are compared: The iteration goes over the collection which would require more operations for search, and each entry is searched in the other collection.

    Returns
    Estimate for the number of operations.

    ◆ SetCapacityHint()

    ResultMem SetCapacityHint

    Increases the internal capacity of the map so that it is prepared to hold at least the given number of elements. This is forwarded to the currently used underlying map implementation.

    Parameters
    [in]capacityThe desired capacity.
    [in]resizeFlagsIf ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data.
    Returns
    False if allocation failed.

    ◆ Reset()

    void Reset

    Resets the map. This destructs all entries and frees any memory held by the map. The map will also switch to the SMALL implementation if necessary, so it will be in a state as if it had been newly constructed.

    ◆ Flush()

    void Flush

    Flushes the map so that it is empty afterwards. Depending on the underlying implementations, memory may still be held for re-use. If REVERSE_THRESHOLD is non-negative, Flush() will also switch back to the SMALL implementation.

    ◆ GetMemorySize()

    Int GetMemorySize

    Returns the memory usage of this map.

    Returns
    Memory size in bytes.

    Member Data Documentation

    ◆ MapType

    friend MapType