DataDictionaryInterface Class Reference

#include <datadictionary.h>

Detailed Description

Class to store and find any data type under any type of key.

DataDictionary values;
values.Set(Data("MachineName"_s), Data(Application::GetMachineInfo().Get(MACHINEINFO::COMPUTERNAME)));
values.Set(Data(Int(100)), Data(Application::GetMachineInfo().Get(MACHINEINFO::OSVERSION)));
values.Set(Data(Vector(1, 0, 0)), Data(String::IntToString(Application::GetMachineInfo().Get(MACHINEINFO::NUMBEROFPROCESSORS))));
static String IntToString(Int32 v)
Definition: c4d_string.h:497
static MAXON_METHOD DataDictionary GetMachineInfo()
MAXON_FUNCTION Result< typename std::conditional< std::is_void< T >::value, typename IsFidClass< KEY >::type, T >::type > Get(KEY &&key) const
Definition: datadictionary.h:149
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:202
Vec3< Float, 1 > Vector
Definition: vector.h:56

Public Types

using Iterator = DataDictionaryIterator
 
using ConstIterator = DataDictionaryIterator
 

Public Member Functions

MAXON_METHOD Result< void > SetData (ForwardingDataPtr &&key, const Data &data)
 
MAXON_METHOD Result< void > SetData (ForwardingDataPtr &&key, Data &&data)
 
MAXON_METHOD Result< void > SetData (ForwardingDataPtr &&key, ForwardingDataPtr &&data)
 
MAXON_METHOD Result< DataGetData (const ConstDataPtr &key) const
 
template<typename KEY >
MAXON_FUNCTION Bool Contains (KEY &&key) const
 
MAXON_METHOD Result< void > EraseData (const ConstDataPtr &key)
 
MAXON_METHOD void Reset ()
 
MAXON_FUNCTION Bool IsEmpty () const
 
MAXON_FUNCTION Bool IsPopulated () const
 
MAXON_METHOD Int GetCount () const
 
MAXON_METHOD String ToString (const FormatStatement *formatStatement=nullptr) const
 
MAXON_METHOD Bool IsEqual (const DataDictionaryInterface *other, EQUALITY equality) const
 
MAXON_METHOD HashInt GetHashCode () const
 
MAXON_METHOD UniqueHash GetUniqueHashCode () const
 
template<typename T = void, typename KEY >
MAXON_FUNCTION Result< typename std::conditional< std::is_void< T >::value, typename IsFidClass< KEY >::type, T >::typeGet (KEY &&key) const
 
template<typename T , typename KEY >
MAXON_FUNCTION std::conditional< IsFidClass< KEY >::value &&GetCollectionKind< T >::value !=COLLECTION_KIND::ARRAY, typename IsFidClass< KEY >::type, T >::type Get (KEY &&key, const T &defaultValue) const
 
template<typename T , typename KEY >
MAXON_FUNCTION std::conditional< IsFidClass< KEY >::value &&GetCollectionKind< T >::value !=COLLECTION_KIND::ARRAY, typename IsFidClass< KEY >::type, T >::type Get (KEY &&key, T &&defaultValue) const
 
template<typename T = void, typename KEY >
MAXON_FUNCTION std::conditional< std::is_void< T >::value, typename IsFidClass< KEY >::type, T >::type GetOrDefault (KEY &&key) const
 
template<typename T , typename KEY >
MAXON_FUNCTION Result< void > Set (KEY &&key, T &&data)
 
template<typename KEY >
MAXON_FUNCTION Result< void > Erase (KEY &&key)
 
template<typename T , typename KEY >
MAXON_FUNCTION Result< void > GetCopy (KEY &&key, T &dst) const
 
MAXON_METHOD void InitIterator (DataDictionaryIteratorInterface *iterator, Bool end) const
 
MAXON_FUNCTION ConstIterator Begin () const
 
MAXON_FUNCTION ConstIterator End () const
 
MAXON_METHOD const DataPrivateGetData (const ConstDataPtr &key) const
 
template<typename T , typename KEY >
std::conditional< std::is_void< T >::value, typename IsFidClass< KEY >::type, T >::type GetOrDefault (KEY &&key) const
 

Static Public Member Functions

static MAXON_METHOD Result< void > DescribeIO (const DataSerializeInterface &stream)
 

Private Member Functions

 MAXON_INTERFACE_NONVIRTUAL (DataDictionaryInterface, MAXON_REFERENCE_COPY_ON_WRITE, "net.maxon.interface.datadictionary", MAXON_IMPLEMENTATION_MODULE("net.maxon.kernel"))
 
template<typename T >
Result< void > GetCopyHelper (const Data &data, T &dst, OverloadRank0) const
 
template<typename T >
std::enable_if< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, Result< void > >::type GetCopyHelper (const Data &data, T &dst, OverloadRank1) const
 

Member Typedef Documentation

◆ Iterator

◆ ConstIterator

Member Function Documentation

◆ MAXON_INTERFACE_NONVIRTUAL()

MAXON_INTERFACE_NONVIRTUAL ( DataDictionaryInterface  ,
MAXON_REFERENCE_COPY_ON_WRITE  ,
"net.maxon.interface.datadictionary"  ,
MAXON_IMPLEMENTATION_MODULE("net.maxon.kernel")   
)
private

◆ SetData() [1/3]

MAXON_METHOD Result<void> SetData ( ForwardingDataPtr &&  key,
const Data data 
)

Set Data under a specific id.

Parameters
[in]keyKey under which the data is stored.
[in]dataReference to the data.
Returns
OK on success. @MAXON_ANNOTATION{returnsThis}

◆ SetData() [2/3]

MAXON_METHOD Result<void> SetData ( ForwardingDataPtr &&  key,
Data &&  data 
)

Set Data under a specific id.

Parameters
[in]keyKey under which the data should be stored.
[in]dataReference to the data.
Returns
OK on success. @MAXON_ANNOTATION{returnsThis}

◆ SetData() [3/3]

MAXON_METHOD Result<void> SetData ( ForwardingDataPtr &&  key,
ForwardingDataPtr &&  data 
)

Set Data under a specific id.

Parameters
[in]keyKey under which the data should be stored.
[in]dataReference to the data.
Returns
OK on success. @MAXON_ANNOTATION{returnsThis}

◆ GetData()

MAXON_METHOD Result<Data> GetData ( const ConstDataPtr key) const

Get data stored under a specific id.

Parameters
[in]keyKey under which the data should be stored.
Returns
Data as Data class.

◆ Contains()

MAXON_FUNCTION Bool Contains ( KEY &&  key) const

Check if there is data stored under a specific key.

Parameters
[in]keyKey under which the data should be stored.
Returns
True if existent.

◆ EraseData()

MAXON_METHOD Result<void> EraseData ( const ConstDataPtr key)

Remove a data entry from the dictionary. This function doesn't check if the dictionary contained the key.

Parameters
[in]keyKey under which the data is stored.
Returns
OK on success. This function doesn't check if the dictionary contained the key.

◆ Reset()

MAXON_METHOD void Reset ( )

Frees the entire dictionary. After this call the DataDictionary is empty.

◆ IsEmpty()

MAXON_FUNCTION Bool IsEmpty ( ) const

Checks if the dictionary is empty.

Returns
True if the dictionary does not contain any elements.

◆ IsPopulated()

MAXON_FUNCTION Bool IsPopulated ( ) const

Checks if the dictionary contains anything.

Returns
True if the dictionary contains any elements.

◆ GetCount()

MAXON_METHOD Int GetCount ( ) const

Returns the number of entries in the dictionary.

Returns
Number of dictionary entries.

◆ ToString()

MAXON_METHOD String ToString ( const FormatStatement formatStatement = nullptr) const

Returns a readable string of the content.

Parameters
[in]formatStatementNullptr or additional formatting instruction. Currently no additional formatting instructions are supported.
Returns
The converted result.

◆ DescribeIO()

static MAXON_METHOD Result<void> DescribeIO ( const DataSerializeInterface stream)
static

Describe all elements of this class for I/O operations.

Parameters
[in]streamThe stream that is used to register the class members.
Returns
OK on success.

◆ IsEqual()

MAXON_METHOD Bool IsEqual ( const DataDictionaryInterface other,
EQUALITY  equality 
) const

Compares this DataDictionary with another if both are identical.

Parameters
[in]otherThe other DataDictionary to compare this object with.
Returns
True if the object is identical.

◆ GetHashCode()

MAXON_METHOD HashInt GetHashCode ( ) const

Returns the hash code of this @CLASS.

Returns
Hash code of this @CLASS.

◆ GetUniqueHashCode()

MAXON_METHOD UniqueHash GetUniqueHashCode ( ) const

Returns the 128-bit hash value of this @CLASS. The implementation ensures uniform distribution, so for practical purposes you can safely assume that two objects are equal if their hash values are equal.

Returns
Hash value of this @CLASS.

◆ Get() [1/3]

MAXON_FUNCTION Result<typename std::conditional<std::is_void<T>::value, typename IsFidClass<KEY>::type, T>::type> Get ( KEY &&  key) const

Get data stored under a specific key. If the key is not found an error will be returned. This functions offers 2 possible calls. First using an FId "dict.Get(MAXCHINEINFO::COMPUTERNAME)" or second using any type directly together with the result type "dict.Get<String>(Int32(5))". The data type needs to be registered.

Parameters
[in]keyKey under which the data is stored.
Returns
Data converted to the right type on success.

◆ Get() [2/3]

MAXON_FUNCTION std::conditional<IsFidClass<KEY>::value&& GetCollectionKind<T>::value != COLLECTION_KIND::ARRAY, typename IsFidClass<KEY>::type, T>::type Get ( KEY &&  key,
const T &  defaultValue 
) const

Get data stored under a specific key. If the key is not found the given default value will be returned. This functions offers 2 possible calls. First using an FId "dict.Get(MAXCHINEINFO::COMPUTERNAME, String())" or second using any type directly together with the result type "dict.Get(Int32(5), String())". The data type needs to be registered.

Parameters
[in]keyKey under which the data is stored.
[in]defaultValueDefault value which should be returned if the key cannot be found.
Returns
Data converted to the right type if found in the dictionary, otherwise the default value.

◆ Get() [3/3]

MAXON_FUNCTION std::conditional<IsFidClass<KEY>::value&& GetCollectionKind<T>::value != COLLECTION_KIND::ARRAY, typename IsFidClass<KEY>::type, T>::type Get ( KEY &&  key,
T &&  defaultValue 
) const

Get data stored under a specific key. If the key is not found the given default value will be returned. This functions offers 2 possible calls. First using an FId "dict.Get(MAXCHINEINFO::COMPUTERNAME, String())" or second using any type directly together with the result type "dict.Get(Int32(5), String())". The data type needs to be registered.

Parameters
[in]keyKey under which the data is stored.
[in]defaultValueDefault value which should be returned if the key cannot be found.
Returns
Data converted to the right type if found in the dictionary, otherwise the default value.

◆ GetOrDefault()

MAXON_FUNCTION std::conditional<std::is_void<T>::value, typename IsFidClass<KEY>::type, T>::type GetOrDefault ( KEY &&  key) const

Get data stored under a specific key. If the key is not found the given default value will be returned. This functions offers 2 possible calls. First using an FId "dict.Get(MAXCHINEINFO::COMPUTERNAME, String())" or second using any type directly together with the result type "dict.Get(Int32(5), String())". The data type needs to be registered.

Parameters
[in]keyKey under which the data is stored.
Returns
Data converted to the right type if found in the dictionary, otherwise the default value.

◆ Set()

MAXON_FUNCTION Result<void> Set ( KEY &&  key,
T &&  data 
)

Set data under a specific id. this function is template to allow implicit Set calls for each data type. This functions offers 2 possible calls. First using an FId "dict.Set(MAXCHINEINFO::COMPUTERNAME, "data"_s)" or second using any type directly "dict.Set(Int32(5), "data"_s)". The data type needs to be registered. LiteralId data type is not allowed as value type (#data).

Parameters
[in]keyKey under which the data is stored.
[in]dataData to be stored in the dictionary.
Returns
OK on success. @MAXON_ANNOTATION{returnsThis}

◆ Erase()

MAXON_FUNCTION Result<void> Erase ( KEY &&  key)

Erase data stored under a specific key. This function doesn't check if the dictionary contained the key. This functions offers 2 possible calls. First using an FId "dict.Erase(MAXCHINEINFO::COMPUTERNAME)" or second using any type directly "dict.Erase(Int32(5))". The data type needs to be registered.

Parameters
[in]keyKey under which the data is stored.
Returns
OK on success. This function doesn't check if the dictionary contained the key.

◆ GetCopy()

MAXON_FUNCTION Result<void> GetCopy ( KEY &&  key,
T &  dst 
) const

Returns a copy of the data stored under a specific id. Can be used for types that do no support copy assignment.

Parameters
[in]keyKey under which the data is stored.
[out]dstUsed to return the data.
Returns
OK on success.

◆ InitIterator()

MAXON_METHOD void InitIterator ( DataDictionaryIteratorInterface iterator,
Bool  end 
) const

Helper functions for iterator.

◆ Begin()

MAXON_FUNCTION ConstIterator Begin ( ) const

Returns the begin iterator of the DataDictionary. You can use the Iterator to run through all elements of the DataDictionary.

◆ End()

Returns the end iterator of the DataDictionary. You can use the Iterator to run through all elements of the DataDictionary.

◆ PrivateGetData()

MAXON_METHOD const Data* PrivateGetData ( const ConstDataPtr key) const

Get data stored under a specific id.

Parameters
[in]keyKey under which the data should be stored.
Returns
Pointer to internal data, or nullptr if there is no value for key.

◆ GetCopyHelper() [1/2]

Result<void> GetCopyHelper ( const Data data,
T &  dst,
OverloadRank0   
) const
private

◆ GetCopyHelper() [2/2]

std::enable_if<GetCollectionKind<T>::value == COLLECTION_KIND::ARRAY, Result<void> >::type GetCopyHelper ( const Data data,
T &  dst,
OverloadRank1   
) const
private