Data Class Reference

#include <datatypebase.h>

Detailed Description

General Data class. An object of this class can store every type of data as long as that type has been registered (see DataType).

See also
$ref datatype_data

Public Member Functions

 Data ()=default
 
Result< void > Init (const DataType &type)
 
 ~Data ()
 
Bool IsEmpty () const
 
Bool IsPopulated () const
 
const DataTypeGetType () const
 
void Reset ()
 
template<typename T >
 Data (T &&data, typename std::enable_if< !STD_IS_REPLACEMENT(same, typename std::decay< T >::type, Data), DummyParamType * >::type=(DummyParamType *) nullptr)
 
 Data (Data &&src)
 
Dataoperator= (Data &&src)
 
Result< DataGetCopy () const
 
Result< void > CopyFrom (const Data &src)
 
Result< void > CopyFrom (const ConstDataPtr &src)
 
Result< void > MoveFrom (MoveDataPtr &&src)
 
Result< void > CopyFrom (ForwardingDataPtr &&src)
 
template<typename T >
Result< void > Set (T &&data)
 
template<typename T >
Result< typename std::conditional< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, T, typename ByValueParam< T >::type >::typeGet () const
 
template<typename T >
Result< typename std::conditional< STD_IS_REPLACEMENT(void, T)||(GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY), T, T & >::typeGet ()
 
template<typename T >
ByValueParam< T >::type GetOrNull () const
 
template<typename T >
Get (const T &defaultValue) const
 
template<typename T >
Result< T > Convert () const
 
template<typename T >
ConvertOrNull () const
 
template<typename T >
Convert (const T &defaultValue) const
 
Result< DataConvertData (const DataType &destType) const
 
template<typename T >
T * GetPtr ()
 
template<typename T >
const T * GetPtr () const
 
Generic * GetPtr (const DataType &type)
 
const Generic * GetPtr (const DataType &type) const
 
const Generic * PrivateGetPtr () const
 
const Generic * PrivateGetPtr (const DataType &type) const
 
TupleValueGetTuple ()
 
const TupleValueGetTuple () const
 
String ToString (const FormatStatement *formatStatement=nullptr) const
 
COMPARERESULT Compare (const Data &c) const
 
HashInt GetHashCode () const
 
UniqueHash GetUniqueHashCode () const
 
Bool IsEqual (const Data &other, EQUALITY equality=EQUALITY::DEEP) const
 
Bool operator== (const Data &other) const
 
Bool operator!= (const Data &other) const
 
Bool operator< (const Data &other) const
 
Bool operator<= (const Data &other) const
 
Bool operator> (const Data &other) const
 
Bool operator>= (const Data &other) const
 
ConstDataPtr ToConstDataPtr (const DataType &expectedType) const
 
template<>
void InitSet (Data &&data)
 
template<>
DataGetPtr ()
 
template<>
Result< void > Get () const
 
template<>
Result< void > Set (const Data &value)
 
template<>
Result< void > Set (Data &value)
 
template<>
Result< void > Set (Data &&value)
 
template<>
void InitSet (HTTPREQUESTTYPE &&d)
 

Static Public Member Functions

template<typename T >
static Result< DataCreate ()
 

Private Member Functions

 MAXON_DISALLOW_COPY_AND_ASSIGN (Data)
 
template<typename DEST , typename SRC >
Result< void > SetImpl (SRC &&data, OverloadRank0)
 
template<typename DEST >
Result< void > SetImpl (const Data &data, OverloadRank1)
 
template<typename DEST >
Result< void > SetImpl (Data &data, OverloadRank1)
 
template<typename DEST >
Result< void > SetImpl (Data &&data, OverloadRank1)
 
template<typename DEST , typename SRC >
std::enable_if< GetCollectionKind< SRC >::value==COLLECTION_KIND::ARRAY, Result< void > >::type SetImpl (SRC &&data, OverloadRank1)
 
template<typename T >
Result< typename ByValueParam< T >::typeGetImpl (OverloadRank0) const
 
template<typename T >
std::enable_if< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, Result< T > >::type GetImpl (OverloadRank1) const
 
template<typename T >
Result< typename std::conditional< STD_IS_REPLACEMENT(void, T), void, T & >::typeGetImpl (OverloadRank0)
 
template<typename T >
std::enable_if< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, Result< T > >::type GetImpl (OverloadRank1)
 
template<typename T >
SFINAEHelper< Result< T >, typename T::IsBlock >::type GetImpl (OverloadRank2)
 
template<typename T >
SFINAEHelper< Result< T >, typename T::IsBlock >::type GetImpl (OverloadRank2) const
 
template<typename T >
void InitSet (T &&data)
 

Static Private Member Functions

static const ObjectInterfaceCheckInstanceOf (const ObjectInterface *obj, const DataType &type)
 
static const ObjectRef * CheckInstanceOf (const ObjectRef *obj, const DataType &type)
 

Private Attributes

DataType _typeInfo
 
DataMemBlock _memBlock
 

Friends

class DataDictionaryInterface
 
class DataDictionaryObjectInterface
 
class ConstDataPtr
 
class TrivialDataPtr
 
class COWData
 

Constructor & Destructor Documentation

◆ Data() [1/3]

Data ( )
default

constructor initializes the data with an nullptr type.

◆ ~Data()

~Data ( )

◆ Data() [2/3]

Data ( T &&  data,
typename std::enable_if< !STD_IS_REPLACEMENT(same, typename std::decay< T >::type, Data), DummyParamType * >::type  = (DummyParamType*)nullptr 
)
explicit

Template class to construct a Data object from a value. The value has to fit in DataMemBlock, i.e., this constructor can only be used when SIZEOF(T) <= SIZEOF(DataMemBlock). Otherwise, you have to use Set which might return an error.

Template Parameters
TType of data. This constructor only works if SIZEOF(T) <= SIZEOF(DataMemBlock).
Parameters
[in]dataData to copy into the Data.

◆ Data() [3/3]

Data ( Data &&  src)

Template class to move Data from every specialized data type. e.g. Int32, Url etc.

Parameters
[in,out]srcData to move to this.

Member Function Documentation

◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( Data  )
private

◆ Init()

Result<void> Init ( const DataType type)

Initializes this data to the given type. If this data already has the given type, nothing happens, i.e., the value is not reset. Otherwise, the current value is freed, and the data is initialized with a new default value of the given type.

Parameters
[in]typeType to which this data shall be set.
Returns
False if the initialization failed.

◆ IsEmpty()

Bool IsEmpty ( ) const

Checks if a Data is empty.

Returns
True if it doesn't contain any data.

◆ IsPopulated()

Bool IsPopulated ( void  ) const

Checks if a Data contains anything.

Returns
True if it contains data.

◆ GetType()

const DataType& GetType ( void  ) const

Returns the DataType of the Data. you can compare this value to GetDataType<Int32>() or GetDataType<String>().

Returns
DataType pointer of this.

◆ Reset()

void Reset ( void  )

Frees the wrapped data and resetd the Data object to its initial state.

◆ operator=()

Data& operator= ( Data &&  src)

Assignment move operator to move Data, (e.g. Swap uses this)

Parameters
[in]srcData to move to this.

◆ CopyFrom() [1/3]

Result<void> CopyFrom ( const Data src)

Makes this @CLASS a copy of src by copying the contents of src into this @CLASS.

Parameters
[in]srcAnother @CLASS to be used as source for the copy operation.
Returns
OK on success.

◆ CopyFrom() [2/3]

Result<void> CopyFrom ( const ConstDataPtr src)

Copies data described by a ConstDataPtr.

Parameters
[in]srcConstDataPtr to copy data from.
Returns
OK on success.

◆ MoveFrom()

Result<void> MoveFrom ( MoveDataPtr &&  src)

Moves data described by a MoveDataPtr.

Parameters
[in]srcMoveDataPtr to move data from.
Returns
OK on success.

◆ CopyFrom() [3/3]

Result<void> CopyFrom ( ForwardingDataPtr &&  src)

Copies or moves data described by a ForwardingDataPtr.

Parameters
[in]srcForwardingDataPtr to copy or move data from.
Returns
OK on success.

◆ Set()

Result<void> Set ( T &&  data)

Set or move a value into a Data.

Parameters
[in]dataNew value for this Data object.

◆ Get() [1/3]

Result<typename std::conditional<GetCollectionKind<T>::value == COLLECTION_KIND::ARRAY, T, typename ByValueParam<T>::type>::type> Get ( void  ) const

Returns the value of type T of this Data.

Template Parameters
TThe expected type of the value.
Returns
The value stored in this Data, or an error if this Data doesn't store a value of type T.

◆ Get() [2/3]

Result<typename std::conditional<STD_IS_REPLACEMENT(void, T) || (GetCollectionKind<T>::value == COLLECTION_KIND::ARRAY), T, T&>::type> Get ( void  )

◆ GetOrNull()

ByValueParam<T>::type GetOrNull ( ) const

Returns the value of type T of this Data.

Template Parameters
TThe expected type of the value.
Returns
The value stored in this Data, or a null value if this Data doesn't store a value of type T.

◆ Get() [3/3]

T Get ( const T &  defaultValue) const

Returns the value of type T of this Data.

Parameters
[in]defaultValueIf this Data doesn't store a value of type T, the default value will be returned.
Template Parameters
TThe expected type of the value.
Returns
The value stored in this Data, or defaultValue if this Data doesn't store a value of type T.

◆ Convert() [1/2]

Result<T> Convert ( ) const

Returns the value of this Data, converted to T.

Template Parameters
TThe type to convert to.
Returns
The value stored in this Data, converted to T, or an error if this Data doesn't store a value or the value cannot be converted to T.
See also
DataType::Convert

◆ ConvertOrNull()

T ConvertOrNull ( ) const

Returns the value of this Data, converted to T.

Template Parameters
TThe type to convert to.
Returns
The value stored in this Data, converted to T, or T() if this Data doesn't store a value or the value cannot be converted to T.
See also
DataType::Convert

◆ Convert() [2/2]

T Convert ( const T &  defaultValue) const

Returns the value of this Data, converted to T.

Parameters
[in]defaultValueIf this Data doesn't store a value or the value cannot converted to T, the default value will be returned.
Template Parameters
TThe type to convert to.
Returns
The value stored in this Data, converted to T, or defaultValue if this Data doesn't store a value or the value cannot be converted to T.
See also
DataType::Convert

◆ ConvertData()

Result<Data> ConvertData ( const DataType destType) const

Returns the value of this Data, converted to destType.

Parameters
[in]destTypeThe type to convert to.
Returns
The value stored in this Data, converted to destType, or an error if this Data doesn't store a value or the value cannot be converted to dataType.
See also
DataType::Convert

◆ GetPtr() [1/3]

const T* GetPtr ( void  ) const

Returns the pointer of the native data if its type matches the given type T, otherwise nullptr.

Template Parameters
TThe desired type.
Returns
Pointer to the data in native format.

◆ GetPtr() [2/3]

Generic* GetPtr ( const DataType type)

Returns the pointer of the native data if its type matches the given type, otherwise nullptr.

Parameters
[in]typeThe desired type.
Returns
Pointer to the data in native format.

◆ GetPtr() [3/3]

const Generic* GetPtr ( const DataType type) const

◆ PrivateGetPtr() [1/2]

const Generic* PrivateGetPtr ( ) const

Returns the pointer to the native data.

Returns
Pointer to the data in native format.

◆ PrivateGetPtr() [2/2]

const Generic* PrivateGetPtr ( const DataType type) const

Returns the pointer to the native data. It is not checked if its type matches the given type, the only purpose of the parameter is to enable a special behavior when type is the type Data: Then a pointer to this Data object itself is returned.

Parameters
[in]typeThe desired type.
Returns
Pointer to the data in native format.

◆ GetTuple() [1/2]

TupleValue* GetTuple ( )

Returns the value of this Data object as a TupleValue. If this object doesn't hold a tuple value, nullptr is returned.

Returns
Pointer to the TupleValue stored in this object, or nullptr if no tuple value is stored.

◆ GetTuple() [2/2]

const TupleValue* GetTuple ( ) const

Returns the value of this Data object as a TupleValue. If this object doesn't hold a tuple value, nullptr is returned.

Returns
Pointer to the TupleValue stored in this object, or nullptr if no tuple value is stored.

◆ ToString()

String ToString ( const FormatStatement formatStatement = nullptr) const

Returns a readable string of the content.

Parameters
[in]formatStatementNullptr or additional formatting instruction. See also Formatting Mixed types.
Returns
The converted result.

◆ Compare()

COMPARERESULT Compare ( const Data c) const

Returns a readable string of the content.

Returns
String that represents the content of Data.

◆ GetHashCode()

HashInt GetHashCode ( ) const

Returns the hash code of the wrapped object. If the object's type doesn't provide a hash code function, this function returns DefaultHasher::EMPTY_HASH.

Returns
Hash code of this Data.

◆ GetUniqueHashCode()

UniqueHash GetUniqueHashCode ( ) const

Returns the hash value of the wrapped object. If the object's type doesn't provide a hash value function, this function returns a default-constructed UniqueHash.

Returns
Hash code of this Data.

◆ IsEqual()

Bool IsEqual ( const Data other,
EQUALITY  equality = EQUALITY::DEEP 
) const

Returns true if the wrapped object of this Data equals that of the other Data.

Parameters
[in]otherAnother Data object to compare.
[in]equalityThe equality mode, by default EQUALITY::DEEP.
Returns
True if both Data objects are equal, false otherwise.

◆ operator==()

Bool operator== ( const Data other) const

==

==

◆ operator!=()

Bool operator!= ( const Data other) const

!=

!=

◆ operator<()

Bool operator< ( const Data other) const

<

<

◆ operator<=()

Bool operator<= ( const Data other) const

<=

<=

◆ operator>()

Bool operator> ( const Data other) const

>

>

◆ operator>=()

Bool operator>= ( const Data other) const

>=

>=

◆ ToConstDataPtr()

ConstDataPtr ToConstDataPtr ( const DataType expectedType) const

◆ CheckInstanceOf() [1/2]

static const ObjectInterface* CheckInstanceOf ( const ObjectInterface obj,
const DataType type 
)
staticprivate

◆ CheckInstanceOf() [2/2]

static const ObjectRef* CheckInstanceOf ( const ObjectRef *  obj,
const DataType type 
)
staticprivate

◆ SetImpl()

std::enable_if< GetCollectionKind< SRC >::value==COLLECTION_KIND::ARRAY, Result< void > >::type SetImpl ( SRC &&  data,
OverloadRank1   
)
private

◆ GetImpl() [1/6]

Result<typename ByValueParam<T>::type> GetImpl ( OverloadRank0  ) const
private

◆ GetImpl() [2/6]

std::enable_if< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, Result< T > >::type GetImpl ( OverloadRank1  ) const
private

◆ GetImpl() [3/6]

Result<typename std::conditional<STD_IS_REPLACEMENT(void, T), void, T&>::type> GetImpl ( OverloadRank0  )
private

◆ GetImpl() [4/6]

std::enable_if< GetCollectionKind< T >::value==COLLECTION_KIND::ARRAY, Result< T > >::type GetImpl ( OverloadRank1  )
private

◆ GetImpl() [5/6]

SFINAEHelper<Result<T>, typename T::IsBlock>::type GetImpl ( OverloadRank2  )
private

◆ GetImpl() [6/6]

SFINAEHelper<Result<T>, typename T::IsBlock>::type GetImpl ( OverloadRank2  ) const
private

◆ InitSet()

void InitSet ( HTTPREQUESTTYPE &&  d)

Friends And Related Function Documentation

◆ DataDictionaryInterface

friend class DataDictionaryInterface
friend

◆ DataDictionaryObjectInterface

friend class DataDictionaryObjectInterface
friend

◆ ConstDataPtr

friend class ConstDataPtr
friend

◆ TrivialDataPtr

friend class TrivialDataPtr
friend

◆ COWData

friend class COWData
friend

Member Data Documentation

◆ _typeInfo

DataType _typeInfo
private

pointer to the DataType structure

◆ _memBlock

DataMemBlock _memBlock
private

placeholder for embedded data. this size must stay for compatibility reasons.