ADTF
Loading...
Searching...
No Matches
ddl::codec::StaticDecoder Class Reference

#include <static_codec.h>

Inherited by ddl::codec::Decoder, and ddl::codec::StaticCodec.

Public Types

typedef DecoderElement< DecoderElementAccess< const StaticDecoder > > Element
 
typedef ChildElements< DecoderElementAccess< const StaticDecoder > > Elements
 

Public Member Functions

 ~StaticDecoder ()=default
 DTOR.
 
 StaticDecoder ()
 
 StaticDecoder (const StaticDecoder &)=delete
 
StaticDecoderoperator= (const StaticDecoder &)=delete
 
 StaticDecoder (StaticDecoder &&)
 
StaticDecoderoperator= (StaticDecoder &&)
 
virtual a_util::result::Result isValid () const
 
Element getElement (const CodecIndex &codec_index) const
 
Element getElement (std::string_view full_path) const
 
Element getChildElement (const CodecIndex &parent_codec_index, std::string_view relative_path) const
 
const ElementsgetElements () const
 
size_t getElementChildCount (const CodecIndex &codec_index=CodecIndex()) const
 
std::string getElementFullName (const CodecIndex &codec_index) const
 Retrieves the full name of the element within its main structure.
 
std::string getElementName (const CodecIndex &codec_index) const
 Retrieves the name of the element within its structured element.
 
const std::string & getElementBaseName (const CodecIndex &codec_index) const
 Retrieves the base name of the element within its structured element.
 
template<typename T>
getElementValue (const CodecIndex &codec_index) const
 
template<typename T>
getElementValue (const LeafCodecIndex &leaf_codec_index) const
 
a_util::variant::Variant getElementVariantValue (const CodecIndex &codec_index) const
 
void getElementVariantValue (const CodecIndex &codec_index, a_util::variant::Variant &value) const
 
std::string getElementStringValue (const CodecIndex &codec_index) const
 
void getElementRawValue (const CodecIndex &index, void *value, size_t value_size) const
 
const void * getElementAddress (const CodecIndex &index) const
 
size_t getStaticBufferSize () const
 Gets the static buffer size in bytes for the main structure.
 
size_t getStaticBufferSize (DataRepresentation rep) const
 Gets the static buffer size in bytes for the main structure.
 
DataRepresentation getRepresentation () const
 
CodecIndex resolve (size_t leaf_index) const
 
CodecIndex resolve (size_t leaf_index, std::string &element_full_name) const
 
size_t getElementCount () const
 
a_util::result::Result getElement (size_t leaf_index, const ddl::StructElement *&legacy_struct_element) const
 
void resolve (CodecIndex &codec_index) const
 
const void * getData () const noexcept
 Get the current set data.
 
size_t getDataSize () const noexcept
 Get the current size (in bytes) of the data.
 

Protected Member Functions

 StaticDecoder (std::shared_ptr< const StructAccess > codec_access, const void *data, size_t data_size, DataRepresentation representation)
 For internal use only.
 

Protected Attributes

std::shared_ptr< const StructAccess > _codec_access
 For internal use only.
 
const void * _data = nullptr
 For internal use only.
 
size_t _data_size = 0
 For internal use only.
 
const ddl::codec::ElementAccessor * _element_accessor
 For internal use only.
 

Friends

class CodecFactory
 

Detailed Description

Decoder for static structures defined by a DataDefinition definition.

Member Typedef Documentation

◆ Element

◆ Elements

Constructor & Destructor Documentation

◆ StaticDecoder() [1/3]

ddl::codec::StaticDecoder::StaticDecoder ( )

Default constructor

◆ StaticDecoder() [2/3]

ddl::codec::StaticDecoder::StaticDecoder ( const StaticDecoder & )
delete

Noncopyable

◆ StaticDecoder() [3/3]

ddl::codec::StaticDecoder::StaticDecoder ( StaticDecoder && )

Move constructor.

Member Function Documentation

◆ getChildElement()

Element ddl::codec::StaticDecoder::getChildElement ( const CodecIndex & parent_codec_index,
std::string_view relative_path ) const

Retrieves an element instance based on the child name of the element.

Parameters
[in]parent_codec_indexThe parent codec index.
[in]relative_pathThe child name of the element in point notation (i.e. "child_element[4].element_value").

By using an empty string the deserialized decoding information within CodecIndex will retrieve the same codec index as it is before.

Returns
The child Codec Index of the StaticDecoder.
Remarks
The element is only valid as long as the StaticDecoder exists.
Exceptions
throwsstd::runtime_error if not found.

◆ getData()

const void * ddl::codec::StaticDecoder::getData ( ) const
noexcept

Get the current set data.

Remarks
For performance issues this will not check any validity!
Returns
const void* The data pointer

◆ getDataSize()

size_t ddl::codec::StaticDecoder::getDataSize ( ) const
noexcept

Get the current size (in bytes) of the data.

Remarks
For performance issues this will not check any validity!
Returns
size_t

◆ getElement() [1/3]

Element ddl::codec::StaticDecoder::getElement ( const CodecIndex & codec_index) const

Retrieves an element instance based on the codec index of that element.

Parameters
[in]codec_indexThe codec index.
Returns
The Codec Index of the DecoderElement.
Remarks
The element is only valid as long as the static decoder exists.
Exceptions
throwsstd::runtime_error if not found.

◆ getElement() [2/3]

a_util::result::Result ddl::codec::StaticDecoder::getElement ( size_t leaf_index,
const ddl::StructElement *& legacy_struct_element ) const

Returns the StructElement of the element with given leaf index.

Parameters
[in]leaf_indexThe leaf index of the element.
[out]legacy_struct_elementthe struct element legacy description.
Returns
The amount of static elements contained in the handled structure.
Remarks
This is for legacy access only!

◆ getElement() [3/3]

Element ddl::codec::StaticDecoder::getElement ( std::string_view full_path) const

Retrieves an element instance based on the full name of the element.

Parameters
[in]full_pathThe full name of the element in point notation (i.e. "element1.child_element[4].element_value").

By using an empty string the deserialized decoding information within CodecIndex will retrieve the buffers first address and whole buffersize. By refering an array without dedicated array index position the deserialized decoding information within CodecIndex will be set to the arrays first address and the whole array size. By refering an structured value (not a leaf value) the deserialized decoding information within CodecIndex will be set to the structs first address and the whole struct size.

Returns
The Codec Index of the DecoderElement.
Remarks
The element is only valid as long as the static decoder exists.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementAddress()

const void * ddl::codec::StaticDecoder::getElementAddress ( const CodecIndex & index) const
Parameters
[in]indexThe index of the element.
Returns
A pointer to the element or nullptr in case of an error.

◆ getElementBaseName()

const std::string & ddl::codec::StaticDecoder::getElementBaseName ( const CodecIndex & codec_index) const

Retrieves the base name of the element within its structured element.

If the element is an array you get the elements base name representation : "element_name" for each array element. If the element is not an array you get the elements name representation is also the base name representation: "element_name" .

Parameters
[in]codec_indexThe codec index of the element.
Returns
The base name of the element.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementChildCount()

size_t ddl::codec::StaticDecoder::getElementChildCount ( const CodecIndex & codec_index = CodecIndex()) const

Retrieves the amount of child elements for the given codec index.

Parameters
[in]codec_indexThe codec index of the element.
Return values
0has no children. May be a leaf element.
>0has children. May be a structured element.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementCount()

size_t ddl::codec::StaticDecoder::getElementCount ( ) const

is the leaf count

Returns
The amount of leaf elements contained in the data structure.

◆ getElementFullName()

std::string ddl::codec::StaticDecoder::getElementFullName ( const CodecIndex & codec_index) const

Retrieves the full name of the element within its main structure.

If the element is an array you get the elements array name representation: "main_element.element_name[0]" or main_element.element_name[1] ... etc. If the element is not an array you get the elements name representation: "main_element.element_name".

Parameters
[in]codec_indexThe codec index of the element.
Returns
The full name of the element in array representation depending on array size.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementName()

std::string ddl::codec::StaticDecoder::getElementName ( const CodecIndex & codec_index) const

Retrieves the name of the element within its structured element.

If the element is an array you get the elements array name representation: "element_name[0]" or element_name[1] ... etc. If the element is not an array you get the elements name representation: "element_name".

Parameters
[in]codec_indexThe codec index of the element.
Returns
The name of the element in array representation depending on array size.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementRawValue()

void ddl::codec::StaticDecoder::getElementRawValue ( const CodecIndex & index,
void * value,
size_t value_size ) const

Returns the current value of the given element as a variant.

Parameters
[in]indexThe index of the element.
[out]valueThe will be set to the current value.
[in]value_sizeSize of the memory in value (if set to 0: unsafe usage of value without size check)
Exceptions
throwsstd::runtime_error if not found.

◆ getElements()

const Elements & ddl::codec::StaticDecoder::getElements ( ) const

Retrieves the elements of the static decoder to get element information.

Returns
Elements The elements iterator container.
See also
forEachLeafElement, forEachElement, StaticDecoder::Element, CodecIndex

◆ getElementStringValue()

std::string ddl::codec::StaticDecoder::getElementStringValue ( const CodecIndex & codec_index) const

Returns the current value of the given element as a string. If this element is a enum type the enum types element name will be set.

Parameters
[in]codec_indexThe index of the element.
Returns
std::string String to return the current value to, if enum, enum value name will be set.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementValue() [1/2]

template<typename T>
T ddl::codec::StaticDecoder::getElementValue ( const CodecIndex & codec_index) const
inline

Returns the current value of the given element as a T if supported.

Parameters
[in]codec_indexThe index of the element.
Template Parameters
TThe type of the value to retrieve.
Returns
Returns the current value as T if supported.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementValue() [2/2]

template<typename T>
T ddl::codec::StaticDecoder::getElementValue ( const LeafCodecIndex & leaf_codec_index) const
inline

Returns the current value of the given element as a T if supported.

Parameters
[in]leaf_codec_indexThe small leaf codec index of the element.
Template Parameters
TThe type of the value to retrieve.
Returns
Returns the current value as T if supported.
Exceptions
std::runtime_errorif there is no valid conversion or the given leaf_codec_index is invalid

◆ getElementVariantValue() [1/2]

a_util::variant::Variant ddl::codec::StaticDecoder::getElementVariantValue ( const CodecIndex & codec_index) const

Returns the current value of the given element as a variant.

Parameters
[in]codec_indexThe index of the element.
Returns
a_util::variant::Variant Variant to return the current value to, type will be set.
Exceptions
throwsstd::runtime_error if not found.

◆ getElementVariantValue() [2/2]

void ddl::codec::StaticDecoder::getElementVariantValue ( const CodecIndex & codec_index,
a_util::variant::Variant & value ) const

Returns the current value of the given element as a variant.

Parameters
[in]codec_indexThe index of the element.
[out]valueVariant to return the current value to, type will be set.
Exceptions
throwsstd::runtime_error if not found.

◆ getRepresentation()

DataRepresentation ddl::codec::StaticDecoder::getRepresentation ( ) const

Returns the current data representation the decoder decodes from.

Returns
The data representation which this decoder handles.

◆ getStaticBufferSize() [1/2]

size_t ddl::codec::StaticDecoder::getStaticBufferSize ( ) const

Gets the static buffer size in bytes for the main structure.

Returns
The size in bytes of the structure in the current data representation (getRepresentation).

◆ getStaticBufferSize() [2/2]

size_t ddl::codec::StaticDecoder::getStaticBufferSize ( DataRepresentation rep) const

Gets the static buffer size in bytes for the main structure.

Parameters
[in]repThe data representation for which the buffer size should be returned.
Returns
The size in bytes of the structure in the requested data representation.

◆ isValid()

virtual a_util::result::Result ddl::codec::StaticDecoder::isValid ( ) const
virtual
Returns
Whether or not the decoder is valid.
Return values
ERR_INVALID_ARGThe passed data is not large enough.

Reimplemented in ddl::codec::Decoder.

◆ operator=() [1/2]

StaticDecoder & ddl::codec::StaticDecoder::operator= ( const StaticDecoder & )
delete

Noncopyable

◆ operator=() [2/2]

StaticDecoder & ddl::codec::StaticDecoder::operator= ( StaticDecoder && )

Move assignment operator.

◆ resolve() [1/3]

void ddl::codec::StaticDecoder::resolve ( CodecIndex & codec_index) const

The codec index will be resolved for fast access (layout will be set)

Parameters
[in]codec_indexThe codec index to resolve.
Exceptions
throwsstd::runtime_error if not found.

◆ resolve() [2/3]

CodecIndex ddl::codec::StaticDecoder::resolve ( size_t leaf_index) const
Parameters
[in]leaf_indexThe leaf index of the element.
Returns
The Codec Index of the element.
Exceptions
throwsstd::runtime_error if not found.

◆ resolve() [3/3]

CodecIndex ddl::codec::StaticDecoder::resolve ( size_t leaf_index,
std::string & element_full_name ) const
Parameters
[in]leaf_indexThe leaf index of the element.
[in,out]element_full_namethe element full name to retrieve.
Returns
The Codec Index of the element.
Exceptions
throwsstd::runtime_error if not found.

The documentation for this class was generated from the following file: