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.
重置
();
// check if data has been cleared
if
(data.
IsEmpty
())
DiagnosticOutput
(
"Data is now empty."
);
数据
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
maxon::Int
number = data.
Get
<
maxon::Int32
>()
iferr_return
;
number++;
data.
Set
(number)
iferr_return
;
DiagnosticOutput
(
"Data: @"
, data);
}
// This example constructs a complex data type and sets its values.
// construct tuple data type
maxon::BaseArray<maxon::DataType>
structTypes;
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
maxon::Data
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.
转换
<
maxon::Float
>()
iferr_return
;
DiagnosticOutput
(
"Float value: @"
, floatData);
拷贝
The data stored in a
maxon::Data
object can easily be copied to another
maxon::Data
对象。
// 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);
比较
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.
比较
(dataB);
if
(res ==
maxon::COMPARERESULT::EQUAL
)
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);
延伸阅读
Result< void > CopyFrom(const Data &src)
定义:
datatypebase.h:1289
Result< T > Convert() const
定义:
datatypebase.h:1394
Bool IsPopulated() const
定义:
datatypebase.h:1211
Result< void > Init(const DataType &type)
定义:
datatypebase.h:1161
const T & Get(Int index, const TupleDataType &type) const
定义:
datatype.h:1027
#define iferr_return
定义:
resultbase.h:1434
#define MAXON_SOURCE_LOCATION
定义:
memoryallocationbase.h:66
Result< typename std::conditional< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, T, typename ByValueParam< T >::type >::type > Get() const
定义:
datatypebase.h:1352
Float64 Float
定义:
apibase.h:193
Result< void > Set(T &&data)
定义:
datatypebase.h:1341
Result< Data > GetCopy() const
Returns a copy of the data.
定义:
datatype.h:1139
#define DiagnosticOutput(formatString,...)
定义:
debugdiagnostics.h:166
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Append()
定义:
basearray.h:569
int32_t Int32
32 bit signed integer datatype.
定义:
apibase.h:172
Int64 Int
signed 32/64 bit int, size depends on the platform
定义:
apibase.h:184
COMPARERESULT Compare(const Data &c) const
定义:
datatypebase.h:1543
const DataType & GetType() const
定义:
datatypebase.h:1220
TupleValue * GetTuple()
定义:
datatypebase.h:1517
String ToString(const FormatStatement *formatStatement=nullptr) const
void Reset()
Frees the wrapped data and resetd the Data object to its initial state.
定义:
datatypebase.h:1225
Bool IsEmpty() const
定义:
datatypebase.h:1202
COMPARERESULT
Data type for comparison results.