Safir SDK Core
Loading...
Searching...
No Matches
Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits > Class Template Reference

This class is used to unpack and read blobs created by the BlobWriter class. More...

#include <Safir/Dob/Typesystem/ToolSupport/BlobReader.h>

Public Types

typedef Traits::RepositoryType RepositoryType
 
typedef Traits::ClassDescriptionType ClassDescriptionType
 
typedef Traits::MemberDescriptionType MemberDescriptionType
 
typedef Traits::PropertyDescriptionType PropertyDescriptionType
 
typedef Traits::ExceptionDescriptionType ExceptionDescriptionType
 
typedef Traits::ParameterDescriptionType ParameterDescriptionType
 
typedef Traits::EnumDescriptionType EnumDescriptionType
 
typedef Traits::MemberMappingDescriptionType MemberMappingDescriptionType
 
typedef Traits::PropertyMappingDescriptionType PropertyMappingDescriptionType
 
typedef Traits::CreateRoutineDescriptionType CreateRoutineDescriptionType
 

Public Member Functions

 BlobReader (const RepositoryT *rep, const char *blob)
 Constructor - Creates a reader object that unpacks the blob and makes it possible to read its content.
 
 BlobReader (const BlobReader &)=delete
 
BlobReaderoperator= (const BlobReader &)=delete
 
DotsC_Int32 Size () const
 Get the size of the blob.
 
DotsC_TypeId TypeId () const
 Get the type id of the blob.
 
bool IsChangedTopLevel (DotsC_MemberIndex member) const
 Check if the member is changed at top level.
 
bool IsChangedRecursive () const
 Check change flags on all members, recursively.
 
bool IsChangedRecursive (DotsC_MemberIndex member) const
 Check change flag on a member, recursively.
 
bool IsChangedHere (DotsC_MemberIndex member, DotsC_Int32 index) const
 Check change flag on a member (non-recursively)
 
int NumberOfValues (DotsC_MemberIndex member) const
 Get the number of values for the member.
 
void ReadStatus (DotsC_MemberIndex member, int valueIndex, bool &isNull, bool &isChanged) const
 Convenience method for checking if a member is null.
 
template<class Key >
Key ReadKey (DotsC_MemberIndex member, int valueIndex) const
 Reads the key element of a member value.
 
template<class Val >
void ReadValue (DotsC_MemberIndex member, int valueIndex, Val &val, bool &isNull, bool &isChanged) const
 Read the value element of a member value.
 

Static Public Member Functions

static DotsC_Int32 GetSize (const char *blob)
 Static method.
 
static DotsC_TypeId GetTypeId (const char *blob)
 Static method.
 

Friends

struct Internal::BlobUtils::BlobAccess
 

Detailed Description

template<class RepositoryT, class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
class Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >

This class is used to unpack and read blobs created by the BlobWriter class.

The methods for reading values are templated. The memberTypes maps to c++ types like described bellow. All strings must be NULL-terminated. Optional strings shall be set to NULL if not present.

Supported types:

Int32 => DostC_Int32 Int64 => DostC_Int64 Float32 => DostC_Float32 Float64 => DostC_Float64 TypeId => DotsC_TypeId Enumeration => DotsC_EnumerationValue String => const char* InstanceId => pair<DotsC_Int64, const char* optional_string> HandlerId => pair<DotsC_Int64, const char* optional_string> ChannelId => pair<DotsC_Int64, const char* optional_string> EntityId => pair<DotsC_EntityId, const char* optional_instance_string> Binary => pair<const char* data, DostC_Int32 size> Object => pair<const char* data, DostC_Int32 size> (a valid blob pointer and blob size)

Member Typedef Documentation

◆ ClassDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::ClassDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ClassDescriptionType

◆ CreateRoutineDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::CreateRoutineDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::CreateRoutineDescriptionType

◆ EnumDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::EnumDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::EnumDescriptionType

◆ ExceptionDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::ExceptionDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ExceptionDescriptionType

◆ MemberDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::MemberDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::MemberDescriptionType

◆ MemberMappingDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::MemberMappingDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::MemberMappingDescriptionType

◆ ParameterDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::ParameterDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ParameterDescriptionType

◆ PropertyDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::PropertyDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::PropertyDescriptionType

◆ PropertyMappingDescriptionType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::PropertyMappingDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::PropertyMappingDescriptionType

◆ RepositoryType

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
typedef Traits::RepositoryType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::RepositoryType

Constructor & Destructor Documentation

◆ BlobReader() [1/2]

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::BlobReader ( const RepositoryT * rep,
const char * blob )

Constructor - Creates a reader object that unpacks the blob and makes it possible to read its content.

Parameters
rep[in] - A type repository to use when interpreting the blob content.
blob[in] - A valid blob like the one created by BlobWriter class.

◆ BlobReader() [2/2]

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::BlobReader ( const BlobReader< RepositoryT, Traits > & )
delete

Member Function Documentation

◆ GetSize()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
static DotsC_Int32 Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::GetSize ( const char * blob)
static

Static method.

Get the size of a blob without having to unpack the whole blob.

Parameters
blob[in] - The blob.
Returns
Number of bytes.

◆ GetTypeId()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
static DotsC_TypeId Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::GetTypeId ( const char * blob)
static

Static method.

Get the typeId of a blob without having to unpack the whole blob.

Parameters
blob[in] - The blob.
Returns
TypeId of the blob.

◆ IsChangedHere()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
bool Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedHere ( DotsC_MemberIndex member,
DotsC_Int32 index ) const

Check change flag on a member (non-recursively)

If member is a SingleValueCollectionType then index must be 0. If member is DictionaryCollectionType or ArrayCollectionType then index must be within bounds. Other uses are undefined behavior. Calling on SequenceCollectionType is undefined behaviour.

Referenced by Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive().

Here is the caller graph for this function:

◆ IsChangedRecursive() [1/2]

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
bool Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive ( ) const

Check change flags on all members, recursively.

Will check top level change flags as well!

References Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive().

Referenced by Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive(), and Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsChangedRecursive() [2/2]

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
bool Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive ( DotsC_MemberIndex member) const

Check change flag on a member, recursively.

Will check top level change flags as well!

References Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedHere(), and Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedRecursive().

Here is the call graph for this function:

◆ IsChangedTopLevel()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
bool Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::IsChangedTopLevel ( DotsC_MemberIndex member) const

Check if the member is changed at top level.

This causes undefined behaviour if called on anything other than a SequenceCollectionType or DictionaryCollectionType.

For sequences and dictionaries changed at top level indicates that the collection has changed in some way.

Parameters
member
Returns

◆ NumberOfValues()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
int Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::NumberOfValues ( DotsC_MemberIndex member) const

Get the number of values for the member.

Only collections may contain more than one value.

Parameters
member[in] - The member.
Returns
Number of values.

◆ operator=()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
BlobReader & Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::operator= ( const BlobReader< RepositoryT, Traits > & )
delete

◆ ReadKey()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
template<class Key >
Key Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ReadKey ( DotsC_MemberIndex member,
int valueIndex ) const

Reads the key element of a member value.

Only applicable for dictionary members. Supported key types: Int32, Int64, TypeId, Enumeration, String, InstanceId, HandlerId, ChannelId, EntityId.

Parameters
member[in] - Member index of the member to read.
valueIndex[in] - The value to read. Must be in range 0 to NumberOfValues()-1.
Returns
The key value.

◆ ReadStatus()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
void Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ReadStatus ( DotsC_MemberIndex member,
int valueIndex,
bool & isNull,
bool & isChanged ) const

Convenience method for checking if a member is null.

All status flags are also fetched with the ReadValue method.

Parameters
member[in] - Member index of the member to to check..
valueIndex[in] - The value to check. Must be in range 0 to NumberOfValues()-1.
isNull[out] - True if value is null.
isChanged[out] - True if value has changed.

◆ ReadValue()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
template<class Val >
void Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ReadValue ( DotsC_MemberIndex member,
int valueIndex,
Val & val,
bool & isNull,
bool & isChanged ) const

Read the value element of a member value.

Parameters
member[in] - Member index of the member to read.
valueIndex[in] - The value to read. Must be in range 0 to NumberOfValues()-1.
val[out] - The value that was read.
isNull[out] - True if value is null.
isChanged[out] - True if value has changed.

◆ Size()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
DotsC_Int32 Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::Size ( ) const

Get the size of the blob.

Returns
Number of bytes.

◆ TypeId()

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
DotsC_TypeId Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::TypeId ( ) const

Get the type id of the blob.

Returns
TypeId of the blob.

Referenced by Safir::Dob::Typesystem::ToolSupport::BlobWriter< RepositoryT, Traits >::MarkChanges().

Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ Internal::BlobUtils::BlobAccess

template<class RepositoryT , class Traits = Safir::Dob::Typesystem::ToolSupport::TypeRepositoryTraits<RepositoryT>>
friend struct Internal::BlobUtils::BlobAccess
friend