MapInterface< K, V > Class Template Reference

#include <map.h>

Inheritance diagram for MapInterface< K, V >:

Detailed Description

template<typename K, typename V>
class maxon::MapInterface< K, V >

MapInterface is an interface which provides the usual map functions as virtual methods. Each standard map of the MAXON API can be represented as such an interface, so this allows to write non-template functions which nevertheless are able to deal with any kind of map.

If the function won't modify both the structure and values of the map, you should use a const MapInterface with const values:

void Func(const MapInterface<Int, const String>& map);
HashMap<Int, String> myMap;
Func(myMap); // OK
ArrayMap<Int, String> myMap2;
Func(myMap2); // OK

The access to the set happens via virtual methods, so there is an inevitable performance penalty, but this will be negligible for most use cases.

For a map which shall be modified, use WritableMapInterface as type of the function parameter instead.

Template Parameters
KType of keys of the map.
VType of values of the map.

Classes

class  IteratorTemplate
 

Public Types

using KeyType = K
 
using ValueType = V
 
using Iterator = IteratorTemplate< false >
 
using ConstIterator = IteratorTemplate< true >
 
- Public Types inherited from MapBase0< MapInterface< K, V >, K, V, EmptyClass, DefaultCompare >
using MapType = MapInterface< K, V >
 
using Super = BaseCollection< MapInterface< K, V >, EmptyClass >
 
using KeyType = K
 
using ValueType = V
 
- Public Types inherited from BaseCollection< COLLECTION, SUPER >
using IsCollection = std::true_type
 
using IsBaseArray = std::false_type
 

Public Member Functions

MAXON_METHOD Int GetCount () const
 
MAXON_FUNCTION Bool IsEmpty () const
 
MAXON_FUNCTION Bool IsPopulated () const
 
MAXON_METHOD ResultRef< V > InsertKey (const K &key, Bool &created=BoolLValue())
 
MAXON_METHOD ResultRef< V > InsertKey (K &&key, Bool &created=BoolLValue())
 
template<typename VALUE >
MAXON_FUNCTION ResultRef< V > Insert (const K &key, VALUE &&value, Bool &created=BoolLValue())
 
template<typename VALUE >
MAXON_FUNCTION ResultRef< V > Insert (K &&key, VALUE &&value, Bool &created=BoolLValue())
 
MAXON_METHOD V * FindValue (const K &key)
 
MAXON_METHOD const V * FindValue (const K &key) const
 
MAXON_METHOD Result< BoolErase (const K &key)
 
MAXON_METHOD Iterator Erase (const Iterator &iterator)
 
MAXON_METHOD void Reset ()
 
MAXON_METHOD void Flush ()
 
MAXON_METHOD Result< void > CopyFrom (const MapInterface &other)
 
MAXON_METHOD Result< MapInterface * > Clone (Bool copyContent=true) const
 
MAXON_METHOD const DataTypeGetKeyDataType () const
 
MAXON_METHOD const DataTypeGetValueDataType () const
 
MAXON_METHOD String ToString (const FormatStatement *formatStatement=nullptr) const
 
MAXON_METHOD Int GetMemorySize () const
 
 MAXON_ADD_TO_CONST_REFERENCE_CLASS (HashInt GetHashCode() const { CriticalStop("Not implemented.");return 0;};)
 
template<typename KT , typename VT >
MAXON_FUNCTION Bool HasType () const
 
template<typename KT , typename VT >
MAXON_FUNCTION void AssertType () const
 
template<typename KT , typename VT >
MapInterface< KT, VT > & AssertCast ()
 
template<typename KT , typename VT >
const MapInterface< KT, VT > & AssertCast () const
 
 operator const MapInterface< K, const V > & () const
 
 operator const MapInterface< Generic, typename std::conditional< STD_IS_REPLACEMENT (same, const V, const Generic)
 
 operator MapInterface< Generic, typename std::conditional< STD_IS_REPLACEMENT (same, V, Generic)
 
Generic ::typeoperator const NonConstMap< K, V > & ()
 
 operator const NonConstMap< Generic, typename std::conditional< STD_IS_REPLACEMENT (same, V, Generic)
 
ConstIterator Begin () const
 
Iterator Begin ()
 
ConstIterator End () const
 
Iterator End ()
 
- Public Member Functions inherited from MapBase0< MapInterface< K, V >, K, V, EmptyClass, DefaultCompare >
MAXON_ATTRIBUTE_FORCE_INLINE MapBase0 (ARGS &&... args)
 
MAXON_ATTRIBUTE_FORCE_INLINE Bool Contains (typename ByValueParam< K >::type key) const
 
MAXON_ATTRIBUTE_FORCE_INLINE SFINAEHelper< Bool, typename PAIR::KeyType >::type Contains (const PAIR &pair) const
 
ResultRef< V > Append (const K &key)
 
SFINAEHelper< ResultRef< V >, 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
 
HashInt GetHashCode () const
 
UniqueHash GetUniqueHashCode () 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

 DeleteReturnType01
 
const Generic ::typeconst
 
 DeleteReturnType02
 
 DeleteReturnType03
 

Private Member Functions

 MAXON_INTERFACE_SIMPLE_VIRTUAL (MapInterface, MAXON_REFERENCE_COPY_ON_WRITE)
 
MAXON_METHOD void IteratorInit (Iterator *it, Bool end)
 
MAXON_METHOD void IteratorInit (ConstIterator *it, Bool end) const
 
MAXON_METHOD void IteratorInitMove (Iterator *dest, Iterator *src) const
 
MAXON_METHOD void IteratorInitMove (ConstIterator *dest, ConstIterator *src) const
 
MAXON_METHOD void IteratorFree (Iterator *it) const
 
MAXON_METHOD void IteratorFree (ConstIterator *it) const
 
MAXON_METHOD Bool IteratorIsEqual (const Iterator *a, const Iterator *b) const
 
MAXON_METHOD Bool IteratorIsEqual (const ConstIterator *a, const ConstIterator *b) const
 
MAXON_METHOD void IteratorInc (Iterator *it) const
 
MAXON_METHOD void IteratorInc (ConstIterator *it) const
 
MAXON_METHOD Pair< const K &, V & > IteratorGet (const Iterator *it) const
 
MAXON_METHOD Pair< const K &, const V & > IteratorGet (const ConstIterator *it) const
 

Static Private Member Functions

static MapInterfaceAlloc (MAXON_SOURCE_LOCATION_DECLARATION)
 
static MapInterfaceAlloc (MAXON_SOURCE_LOCATION_DECLARATION, const MapInterface &src)
 

Friends

template<typename MAP >
class MapImpl
 

Additional Inherited Members

- Static Public Member Functions inherited from MapBase0< MapInterface< K, V >, K, V, EmptyClass, DefaultCompare >
static const K & GetMapKey (const K &key)
 
static const K & GetMapKey (const PAIR &pair)
 
- Static Public Attributes inherited from MapBase0< MapInterface< K, V >, K, V, EmptyClass, DefaultCompare >
static const COLLECTION_KIND KIND
 

Member Typedef Documentation

◆ KeyType

using KeyType = K

◆ ValueType

using ValueType = V

◆ Iterator

using Iterator = IteratorTemplate<false>

◆ ConstIterator

Member Function Documentation

◆ MAXON_INTERFACE_SIMPLE_VIRTUAL()

MAXON_INTERFACE_SIMPLE_VIRTUAL ( MapInterface< K, V >  ,
MAXON_REFERENCE_COPY_ON_WRITE   
)
private

◆ GetCount()

MAXON_METHOD Int GetCount ( ) const

Gets the number of map entries.

Returns
Number of map entries.

◆ IsEmpty()

MAXON_FUNCTION Bool IsEmpty ( ) const

@MAXON_ANNOTATION{default=true}

◆ IsPopulated()

MAXON_FUNCTION Bool IsPopulated ( ) const

◆ InsertKey() [1/2]

MAXON_METHOD ResultRef<V> InsertKey ( const K &  key,
Bool created = BoolLValue() 
)

Finds the value associated with the given key, or creates a corresponding entry if it doesn't exist yet. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).

Parameters
[in]keyKey of the value to find or create.
[out]createdThis will be set to true if a new entry has been created successfully, otherwise it will be set to false.
Returns
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.

◆ InsertKey() [2/2]

MAXON_METHOD ResultRef<V> InsertKey ( K &&  key,
Bool created = BoolLValue() 
)

Finds the value associated with the given key, or creates a corresponding entry if it doesn't exist yet. The value of a new entry has to be initialized afterwards (but its default constructor has already been invoked).

Parameters
[in]keyKey of the entry to find or create. If a new entry is created, its key will be constructed by move-semantics if possible.
[out]createdThis will be set to true if a new entry has been created successfully, otherwise it will be set to false.
Returns
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.

◆ Insert() [1/2]

MAXON_FUNCTION ResultRef<V> Insert ( const K &  key,
VALUE &&  value,
Bool created = BoolLValue() 
)

Associates the given value with the given key. This adds a new entry for key if necessary, and then sets its value to the given value, whether the entry existed before or not.

Parameters
[in]keyKey which shall map to the value.
[in]valueValue to which the key shall map.
[out]createdThis will be set to true if a new entry has been created, otherwise it will be set to false.
Returns
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.

◆ Insert() [2/2]

MAXON_FUNCTION ResultRef<V> Insert ( K &&  key,
VALUE &&  value,
Bool created = BoolLValue() 
)

Associates the given value with the given key. This adds a new entry for key if necessary, and then sets its value to the given value, whether the entry existed before or not.

Parameters
[in]keyKey of the entry to find or create. If a new entry is created, its key will be constructed by move-semantics if possible.
[in]valueValue to which the key shall map.
[out]createdThis will be set to true if a new entry has been created, otherwise it will be set to false.
Returns
Pointer to value for the given key, or nullptr if an entry didn't exist and allocation of a new entry failed.

◆ FindValue() [1/2]

MAXON_METHOD V* FindValue ( const K &  key)

Finds the value associated with the given key in this map.

Parameters
[in]keyKey to search for.
Returns
Pointer to value for the given key, or nullptr if no entry exists for the key.

◆ FindValue() [2/2]

MAXON_METHOD const V* FindValue ( const K &  key) const

Finds the value associated with the given key in this map.

Parameters
[in]keyKey to search for.
Returns
Pointer to value for the given key, or nullptr if no entry exists for the key.

◆ Erase() [1/2]

MAXON_METHOD Result<Bool> Erase ( const K &  key)

Removes an entry with the given key from this map (if possible).

Parameters
[in]keyKey of the map entry to be be removed.
Returns
True if an entry was found and removed for key, otherwise false or an error if a memory allocation failed.

◆ Erase() [2/2]

MAXON_METHOD Iterator Erase ( const Iterator iterator)

Removes the element at iterator from this set. The returned iterator will point to the element behind the last removed element.

Parameters
[in]iteratorIterator pointing to the element to be removed.
Returns
Iterator pointing to the element behind the removed element.

◆ Reset()

MAXON_METHOD void Reset ( )

Deletes all elements (calls destructors and frees memory).

◆ Flush()

MAXON_METHOD void Flush ( )

Deletes all elements, but doesn't free memory (calls destructors though).

◆ CopyFrom()

MAXON_METHOD Result<void> CopyFrom ( const MapInterface< K, V > &  other)

Sets this map to a copy of the given other map.

Parameters
[in]otherSource map.
Returns
Success of operation.

◆ Clone()

MAXON_METHOD Result<MapInterface*> Clone ( Bool  copyContent = true) const

Returns a clone of this map.

Parameters
[in]copyContentTrue if also the elements shall be cloned, false otherwise (then just a new object sharing the same MapInterface implementation is created).
Returns
Pointer to the new map object, nullptr if allocation or copying failed.

◆ GetKeyDataType()

MAXON_METHOD const DataType& GetKeyDataType ( ) const

Returns the data type of this map's keys. This may be nullptr if there is no DataType for the template parameter K.

Returns
DataType of the keys or nullptr.

◆ GetValueDataType()

MAXON_METHOD const DataType& GetValueDataType ( ) const

Returns the data type of this map's values. This may be nullptr if there is no DataType for the template parameter V.

Returns
DataType of the values or nullptr.

◆ ToString()

MAXON_METHOD String ToString ( const FormatStatement formatStatement = nullptr) const
Parameters
[in]formatStatementNullptr or additional formatting instruction. Currently no additional formatting instructions are supported.

◆ GetMemorySize()

MAXON_METHOD Int GetMemorySize ( ) const

Calculates the memory usage for this map.

Returns
Memory size in bytes.

◆ MAXON_ADD_TO_CONST_REFERENCE_CLASS()

MAXON_ADD_TO_CONST_REFERENCE_CLASS ( HashInt GetHashCode() const { CriticalStop("Not implemented.");return 0;};  )

◆ HasType()

MAXON_FUNCTION Bool HasType ( ) const

◆ AssertType()

MAXON_FUNCTION void AssertType ( ) const

Issues a failed DebugAssert if the DataTypes of this map doesn't match KT/VT. For Generic, no check happens.

Template Parameters
KTType of keys to check.
VTType of values to check.

◆ AssertCast() [1/2]

MapInterface<KT, VT>& AssertCast ( )

Casts this map to a map with keys of type KT and values of type VT. If one of they types doesn't match the actual data type of this map, a failed DebugAssert is issued. This function only makes sense when the original map uses Generic for at least one of its types.

Template Parameters
KTAssumed key type of the map.
VTAssumed value type of the map.
Returns
This map, cast to a MapInterface<KT, VT>.

◆ AssertCast() [2/2]

const MapInterface<KT, VT>& AssertCast ( ) const

Casts this map to a map with keys of type KT and values of type VT. If one of they types doesn't match the actual data type of this map, a failed DebugAssert is issued. This function only makes sense when the original map uses Generic for at least one of its types.

Template Parameters
KTAssumed key type of the map.
VTAssumed value type of the map.
Returns
This map, cast to a MapInterface<KT, VT>.

◆ operator const MapInterface< K, const V > &()

operator const MapInterface< K, const V > & ( ) const

◆ operator const MapInterface< Generic, typename std::conditional< STD_IS_REPLACEMENT()

operator const MapInterface< Generic, typename std::conditional< STD_IS_REPLACEMENT ( same  ,
const  V,
const  Generic 
)

◆ operator MapInterface< Generic, typename std::conditional< STD_IS_REPLACEMENT()

operator MapInterface< Generic, typename std::conditional< STD_IS_REPLACEMENT ( same  ,
,
Generic   
)

◆ operator const NonConstMap< K, V > &()

Generic ::type& operator const NonConstMap< K, V > & ( )

◆ operator const NonConstMap< Generic, typename std::conditional< STD_IS_REPLACEMENT()

operator const NonConstMap< Generic, typename std::conditional< STD_IS_REPLACEMENT ( same  ,
,
Generic   
)

◆ Begin() [1/2]

ConstIterator Begin ( ) const

Returns an iterator pointing to the first map entry.

Returns
Iterator for the first map entry (equal to End() if the map is empty).

◆ Begin() [2/2]

Iterator Begin ( )

Returns an iterator pointing to the first map entry.

Returns
Iterator for the first map entry (equal to End() if the map is empty).

◆ End() [1/2]

ConstIterator End ( ) const

Returns an iterator pointing one behind the last map entry.

Returns
Iterator for the map end, this is one behind the last map entry.

◆ End() [2/2]

Iterator End ( )

Returns an iterator pointing one behind the last map entry.

Returns
Iterator for the map end, this is one behind the last map entry.

◆ IteratorInit() [1/2]

MAXON_METHOD void IteratorInit ( Iterator it,
Bool  end 
)
private

◆ IteratorInit() [2/2]

MAXON_METHOD void IteratorInit ( ConstIterator it,
Bool  end 
) const
private

◆ IteratorInitMove() [1/2]

MAXON_METHOD void IteratorInitMove ( Iterator dest,
Iterator src 
) const
private

◆ IteratorInitMove() [2/2]

MAXON_METHOD void IteratorInitMove ( ConstIterator dest,
ConstIterator src 
) const
private

◆ IteratorFree() [1/2]

MAXON_METHOD void IteratorFree ( Iterator it) const
private

◆ IteratorFree() [2/2]

MAXON_METHOD void IteratorFree ( ConstIterator it) const
private

◆ IteratorIsEqual() [1/2]

MAXON_METHOD Bool IteratorIsEqual ( const Iterator a,
const Iterator b 
) const
private

◆ IteratorIsEqual() [2/2]

MAXON_METHOD Bool IteratorIsEqual ( const ConstIterator a,
const ConstIterator b 
) const
private

◆ IteratorInc() [1/2]

MAXON_METHOD void IteratorInc ( Iterator it) const
private

◆ IteratorInc() [2/2]

MAXON_METHOD void IteratorInc ( ConstIterator it) const
private

◆ IteratorGet() [1/2]

MAXON_METHOD Pair<const K&, V&> IteratorGet ( const Iterator it) const
private

◆ IteratorGet() [2/2]

MAXON_METHOD Pair<const K&, const V&> IteratorGet ( const ConstIterator it) const
private

◆ Alloc() [1/2]

static MapInterface* Alloc ( MAXON_SOURCE_LOCATION_DECLARATION  )
staticprivate

◆ Alloc() [2/2]

static MapInterface* Alloc ( MAXON_SOURCE_LOCATION_DECLARATION  ,
const MapInterface< K, V > &  src 
)
staticprivate

Friends And Related Function Documentation

◆ MapImpl

friend class MapImpl
friend

Member Data Documentation

◆ DeleteReturnType01

DeleteReturnType01

◆ const

const Generic ::type& const

◆ DeleteReturnType02

DeleteReturnType02

◆ DeleteReturnType03

DeleteReturnType03