Data Manual

About

maxon::Data is a generic container that can store any MAXON API data type (MAXON Data Type). It is typically used together with a maxon::DataDictionary which stores such maxon::Data elements, see DataDictionary Manual.

Creation

A new maxon::Data object can simply be created on the stack.

// This example creates new maxon::Data objects with various data.
// store maxon::String
data.Set("Hello World"_s) iferr_return;
// store maxon::Int
const maxon::Data integerData(123);
const maxon::DataType dataType = integerData.GetType();
if (dataType)
DiagnosticOutput("Type: @", dataType);
// store maxon::Float
const maxon::DataType floatDataType = maxon::GetDataType<maxon::Float>();
if (floatDataType)
{
maxon::Data floatData;
floatData.Init(floatDataType) iferr_return;
DiagnosticOutput("Float Data: @", floatData);
}

A given maxon::Data object can be inspected and reset with:

// This example checks if the given maxon::Data object is empty.
// If not the type of the stored data is printed to the debug console.
// After that, it is emptied.
if (data.IsPopulated())
{
// check type of the stored data
const maxon::DataType type = data.GetType();
if (type)
DiagnosticOutput("Type: @", type);
}
// clear data
data.Reset();
// check if data has been cleared
if (data.IsEmpty())
DiagnosticOutput("Data is now empty.");

Data

The key function of maxon::Data is to store and access data stored in the object:

// This example checks if the given maxon::Data object stores an maxon::Int32 value.
// If so, the stored value is increased.
// get maxon::Int32 type
const maxon::DataType integerType = maxon::GetDataType<maxon::Int32>();
if (!integerType)
return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
// check if data stores maxon::Int32 data
const maxon::DataType type = data.GetType();
if (type == integerType)
{
// increment data
number++;
data.Set(number) iferr_return;
DiagnosticOutput("Data: @", data);
}
// This example constructs a complex data type and sets its values.
// construct tuple data type
structTypes.Append(maxon::GetDataType<maxon::Int>()) iferr_return;
structTypes.Append(maxon::GetDataType<maxon::Float>()) iferr_return;
const maxon::TupleDataType tupleDataType = maxon::ParametricTypes::Tuple().Instantiate(structTypes) iferr_return;
// create data
data.Init(tupleDataType) iferr_return;
// access tuple
maxon::TupleValue* const tuple = data.GetTuple();
if (!tuple)
return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
// fill data
tuple->Get<maxon::Int>(0, tupleDataType) = 100;
tuple->Get<maxon::Float>(1, tupleDataType) = 100.0_f;
// check data
DiagnosticOutput("Data: @", data);

The data stored within a maxon::Data object can also be converted into another data type:

// This example converts the stored value into a maxon::Float value.
const maxon::Float floatData = data.Convert<maxon::Float>() iferr_return;
DiagnosticOutput("Float value: @", floatData);

Copy

The data stored in a maxon::Data object can easily be copied to another maxon::Data object.

// This example copies the data stored in the given maxon::Data object to two new objects.
// use CopyFrom()
maxon::Data copy1;
copy1.CopyFrom(data) iferr_return;
DiagnosticOutput("Copy: @", copy1);
// use GetCopy()
const maxon::Data copy2 = data.GetCopy() iferr_return;
DiagnosticOutput("Copy: @", copy2);

Compare

There are multiple ways to compare two given maxon::Data objects:

// This example compares the two given maxon::Data objects in multiple ways.
const maxon::COMPARERESULT res = dataA.Compare(dataB);
DiagnosticOutput("Data containers are equal.");
if (dataA.IsEqual(dataB))
DiagnosticOutput("Data containers are equal.");
if (dataA == dataB)
DiagnosticOutput("Data containers are equal.");

Utility

Further utility functions are:

// This example gets the maxon::String representation of the
// stored data and prints it to the console.
const maxon::String str = data.ToString(nullptr);
DiagnosticOutput("String: @", str);

Further Reading

maxon::Data::CopyFrom
Result< void > CopyFrom(const Data &src)
Definition: datatypebase.h:1228
maxon::Data::Convert
Result< T > Convert() const
Definition: datatypebase.h:1333
maxon::DataType
Definition: datatypebase.h:669
maxon::Data::IsPopulated
Bool IsPopulated() const
Definition: datatypebase.h:1150
maxon::Data::Init
Result< void > Init(const DataType &type)
Definition: datatypebase.h:1100
maxon::COMPARERESULT::EQUAL
@ EQUAL
result is equal
maxon::String
Definition: string.h:1197
maxon::Data
Definition: datatypebase.h:1086
maxon::TupleValue::Get
const T & Get(Int index, const TupleDataType &type) const
Definition: datatype.h:1019
iferr_return
#define iferr_return
Definition: resultbase.h:1434
MAXON_SOURCE_LOCATION
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:66
maxon::Data::Get
Result< typename std::conditional< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, T, typename ByValueParam< T >::type >::type > Get() const
Definition: datatypebase.h:1291
maxon::Float
Float64 Float
Definition: apibase.h:188
maxon::Data::Set
Result< void > Set(T &&data)
Definition: datatypebase.h:1280
maxon::Data::GetCopy
Result< Data > GetCopy() const
Returns a copy of the data.
Definition: datatype.h:1130
maxon::BaseArray
Definition: basearray.h:366
maxon::TupleValue
Definition: datatype.h:1009
DiagnosticOutput
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:168
maxon::BaseArray::Append
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Append()
Definition: basearray.h:569
maxon::Int32
int32_t Int32
32 bit signed integer datatype.
Definition: apibase.h:167
maxon::Int
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:179
maxon::TupleDataType
Definition: datatypelib.h:652
maxon::Data::Compare
COMPARERESULT Compare(const Data &c) const
Definition: datatypebase.h:1482
maxon::Data::GetType
const DataType & GetType() const
Definition: datatypebase.h:1159
maxon::Data::ToString
String ToString(const FormatStatement *formatStatement) const
maxon::Data::GetTuple
TupleValue * GetTuple()
Definition: datatypebase.h:1456
maxon::Data::Reset
void Reset()
Frees the wrapped data and resetd the Data object to its initial state.
Definition: datatypebase.h:1164
maxon::Data::IsEmpty
Bool IsEmpty() const
Definition: datatypebase.h:1141
maxon::COMPARERESULT
COMPARERESULT
Data type for comparison results.
Definition: compare.h:20