![]() |
Safir SDK Core
|
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 | |
BlobReader & | operator= (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 |
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.
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)
typedef Traits::ClassDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ClassDescriptionType |
typedef Traits::CreateRoutineDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::CreateRoutineDescriptionType |
typedef Traits::EnumDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::EnumDescriptionType |
typedef Traits::ExceptionDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ExceptionDescriptionType |
typedef Traits::MemberDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::MemberDescriptionType |
typedef Traits::MemberMappingDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::MemberMappingDescriptionType |
typedef Traits::ParameterDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::ParameterDescriptionType |
typedef Traits::PropertyDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::PropertyDescriptionType |
typedef Traits::PropertyMappingDescriptionType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::PropertyMappingDescriptionType |
typedef Traits::RepositoryType Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::RepositoryType |
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.
rep | [in] - A type repository to use when interpreting the blob content. |
blob | [in] - A valid blob like the one created by BlobWriter class. |
|
delete |
|
static |
Static method.
Get the size of a blob without having to unpack the whole blob.
blob | [in] - The blob. |
|
static |
Static method.
Get the typeId of a blob without having to unpack the whole blob.
blob | [in] - The blob. |
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().
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().
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().
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.
member |
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.
member | [in] - The member. |
|
delete |
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.
member | [in] - Member index of the member to read. |
valueIndex | [in] - The value to read. Must be in range 0 to NumberOfValues()-1. |
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.
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. |
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.
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. |
DotsC_Int32 Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::Size | ( | ) | const |
Get the size of the blob.
DotsC_TypeId Safir::Dob::Typesystem::ToolSupport::BlobReader< RepositoryT, Traits >::TypeId | ( | ) | const |
Get the type id of the blob.
Referenced by Safir::Dob::Typesystem::ToolSupport::BlobWriter< RepositoryT, Traits >::MarkChanges().
|
friend |