BaseCollection< COLLECTION, SUPER > Class Template Reference

#include <collection.h>

Inheritance diagram for BaseCollection< COLLECTION, SUPER >:

Detailed Description

template<typename COLLECTION, typename SUPER>
class maxon::BaseCollection< COLLECTION, SUPER >

BaseCollection is a helper template to be used as base class for collections which have Begin()/End() functions returning iterators, and a GetCount() function. It will then add iterator-based utility functions such as ToString.

Template Parameters
COLLECTIONThe actual collection class, this has to have BaseCollection as (direct or indirect) base class.
SUPERThe class to be used as base class for BaseCollection.
See also
$ref collections

Public Types

using IsCollection = std::true_type
 
using IsBaseArray = std::false_type
 

Public Member Functions

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
 

Member Typedef Documentation

◆ IsCollection

using IsCollection = std::true_type

◆ IsBaseArray

using IsBaseArray = std::false_type

Constructor & Destructor Documentation

◆ BaseCollection()

MAXON_ATTRIBUTE_FORCE_INLINE BaseCollection ( ARGS &&...  args)
explicit

Member Function Documentation

◆ operator==()

MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if<maxon::IsCollection<COLLECTION2>::value, Bool>::type operator== ( const COLLECTION2 &  other) const

◆ operator!=()

MAXON_ATTRIBUTE_FORCE_INLINE std::enable_if<maxon::IsCollection<COLLECTION2>::value, Bool>::type operator!= ( const COLLECTION2 &  other) const

◆ IsEqual()

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

◆ AppendAll()

Appends all elements from another collection other to this collection. If this doesn't succeed for all entries, the collection will be left in a valid, but intermediate state with only some entries from other added.

Parameters
[in]otherAnother collection, may be any iterable object.
[in]resizeFlagsIf ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data.
Returns
OK on success.

◆ CopyFrom()

MAXON_ATTRIBUTE_FORCE_INLINE Result<void> CopyFrom ( COLLECTION2 &&  other,
COLLECTION_RESIZE_FLAGS  resizeFlags = COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE 
)

Makes this collection a copy of other. If copying doesn't succeed for all entries, the collection will be left in a valid, but intermediate state with only some entries from other added.

Parameters
[in]otherAnother collection, may be any iterable object.
[in]resizeFlagsIf ON_GROW_FIT_TO_SIZE is set, the collection will use only as much memory as needed to hold the data.
Returns
OK on success.

◆ Subtract()

MAXON_ATTRIBUTE_FORCE_INLINE Result<void> Subtract ( COLLECTION2 &&  other)

Removes all elements of another collection other from this collection. Elements of this collection which are not part of other are kept. For a map, only the keys are considered, i.e., an entry is removed from this map if its key is contained in other, regardless of the corresponding values.

Parameters
[in]otherAnother collection, may be any iterable object.
Returns
OK on success.

◆ Intersect()

MAXON_ATTRIBUTE_FORCE_INLINE Result<void> Intersect ( const COLLECTION2 &  other)

Intersects this collection with the other collection. I.e., elements which are not contained in other are removed. For a map, only the keys are considered, i.e., an entry is kept in this map if its key is contained in other, regardless of the corresponding values.

Parameters
[in]otherAnother collection, may be any predicate object.
Returns
OK on success.

◆ Intersects()

Bool Intersects ( const COLLECTION2 &  other) const

◆ CopyFromImpl()

MAXON_ATTRIBUTE_FORCE_INLINE Result<void> CopyFromImpl ( COLLECTION2 &&  other,
COLLECTION_RESIZE_FLAGS  resizeFlags,
OverloadRank0   
)

◆ AppendAllImpl()

Result<void> AppendAllImpl ( COLLECTION2 &&  other,
COLLECTION_RESIZE_FLAGS  resizeFlags,
Bool  overwrite,
OverloadRank0   
)

◆ IntersectImpl()

Result<void> IntersectImpl ( COLLECTION2 &&  other,
OverloadRank0   
)

◆ IsEmpty()

Checks if the collection is empty. This is the same as GetCount() == 0

Returns
True if the collection does not contain any elements.

◆ IsPopulated()

MAXON_ATTRIBUTE_FORCE_INLINE Bool IsPopulated ( void  ) const

Checks if the collection is populated. This is the same as GetCount() != 0

Returns
True if the collection contains any elements.

◆ ContainsAll()

MAXON_ATTRIBUTE_FORCE_INLINE Bool ContainsAll ( COLLECTION2 &&  other) const

Returns true if this collection contains all elements from another collection.

Parameters
[in]otherAnother collection, may be any iterable object.
Returns
True if this collection contains all elements from other, false otherwise.

◆ ContainsAllImpl()

Bool ContainsAllImpl ( COLLECTION2 &&  other,
OverloadRank0   
) const