ADTF
StaticDecoder

Decoder for static structures defined by a DataDefinition definition. More...

Inheritance diagram for StaticDecoder:
[legend]

Public Types

typedef DecoderElement< DecoderElementAccess< const StaticDecoder > > Element
 Static decoder element.
 
typedef ChildElements< DecoderElementAccess< const StaticDecoder > > Elements
 Iterator container to iterate all elements of the static decoder. More...
 

Public Member Functions

 ~StaticDecoder ()=default
 DTOR.
 
 StaticDecoder ()
 Default constructor.
 
 StaticDecoder (const StaticDecoder &)=delete
 Noncopyable.
 
StaticDecoderoperator= (const StaticDecoder &)=delete
 Noncopyable.
 
 StaticDecoder (StaticDecoder &&)
 Move constructor.
 
StaticDecoderoperator= (StaticDecoder &&)
 Move assignment operator.
 
virtual a_util::result::Result isValid () const
 
Element getElement (const CodecIndex &codec_index) const
 Retrieves an element instance based on the codec index of that element. More...
 
Element getElement (const std::string &full_element_name) const
 Retrieves an element instance based on the full name of the element. More...
 
const ElementsgetElements () const
 Retrieves the elements of the static decoder to get element information. More...
 
size_t getElementChildCount (const CodecIndex &codec_index=CodecIndex()) const
 Retrieves the amount of child elements for the given codec index. More...
 
std::string getElementFullName (const CodecIndex &codec_index) const
 Retrieves the full name of the element within its main structure. More...
 
std::string getElementName (const CodecIndex &codec_index) const
 Retrieves the name of the element within its structured element. More...
 
const std::string & getElementBaseName (const CodecIndex &codec_index) const
 Retrieves the base name of the element within its structured element. More...
 
template<typename T >
getElementValue (const CodecIndex &codec_index) const
 Returns the current value of the given element as a T if supported. More...
 
template<typename T >
getElementValue (const LeafCodecIndex &leaf_codec_index) const
 Returns the current value of the given element as a T if supported. More...
 
a_util::variant::Variant getElementVariantValue (const CodecIndex &codec_index) const
 Returns the current value of the given element as a variant. More...
 
void getElementVariantValue (const CodecIndex &codec_index, a_util::variant::Variant &value) const
 Returns the current value of the given element as a variant. More...
 
std::string getElementStringValue (const CodecIndex &codec_index) const
 Returns the current value of the given element as a string. More...
 
void getElementRawValue (const CodecIndex &index, void *value, size_t value_size) const
 Returns the current value of the given element as a variant. More...
 
const void * getElementAddress (const CodecIndex &index) const
 
size_t getStaticBufferSize () const
 Gets the static buffer size in bytes for the main structure. More...
 
size_t getStaticBufferSize (DataRepresentation rep) const
 Gets the static buffer size in bytes for the main structure. More...
 
DataRepresentation getRepresentation () const
 Returns the current data representation the decoder decodes from. More...
 
CodecIndex resolve (size_t leaf_index) const
 
CodecIndex resolve (size_t leaf_index, std::string &element_full_name) const
 
size_t getElementCount () const
 is the leaf count More...
 
a_util::result::Result getElement (size_t leaf_index, const ddl::StructElement *&legacy_struct_element) const
 Returns the StructElement of the element with given leaf index. More...
 
void resolve (CodecIndex &codec_index) const
 The codec index will be resolved for fast access (layout will be set) More...
 
const void * getData () const noexcept
 Get the current set data. More...
 
size_t getDataSize () const noexcept
 Get the current size (in bytes) of the data. More...
 

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.
 

Private Attributes

ddl::access_element::StructElementLegacy< const StaticDecoder_legacy_element
 For internal use only.
 
Element _first_element
 

Detailed Description

Decoder for static structures defined by a DataDefinition definition.

Definition at line 38 of file workspace/conan/dev_essential/1.4.3/dw/stable/package/aef85909f792a5a628750d25016a24323084963f/include/ddl/codec/static_codec.h.

Member Typedef Documentation

◆ Elements

Member Function Documentation

◆ getData()

const void* getData ( ) const
noexcept

Get the current set data.

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

Referenced by StaticDecoder::getElementValue(), and StaticCodec::setElementValue().

◆ getDataSize()

size_t 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

Referenced by StaticDecoder::getElementValue(), Codec::setElementValue(), and StaticCodec::setElementValue().

◆ getElement() [1/3]

Element 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]

Element getElement ( const std::string &  full_element_name) const

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

Parameters
[in]full_element_nameThe 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.

◆ getElement() [3/3]

a_util::result::Result 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!

◆ getElementAddress()

const void* 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& 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 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 getElementCount ( ) const

is the leaf count

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

Referenced by ddl::codec::detail::getDecoderOrFactoryElementCount().

◆ getElementFullName()

std::string 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 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 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& 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 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]

T 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.

Definition at line 161 of file workspace/conan/dev_essential/1.4.3/dw/stable/package/aef85909f792a5a628750d25016a24323084963f/include/ddl/codec/static_codec.h.

References ValueGetterSelect< DecoderType, ValueType, is_supported_leaf_type >::getValue().

◆ getElementValue() [2/2]

T 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

Definition at line 174 of file workspace/conan/dev_essential/1.4.3/dw/stable/package/aef85909f792a5a628750d25016a24323084963f/include/ddl/codec/static_codec.h.

References StaticDecoder::getData(), StaticDecoder::getDataSize(), LeafCodecIndex::getLayout(), and LeafValueGetter< ValueType >::getValue().

◆ getElementVariantValue() [1/2]

a_util::variant::Variant 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 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 getRepresentation ( ) const

Returns the current data representation the decoder decodes from.

Returns
The data representation which this decoder handles.

◆ getStaticBufferSize() [1/2]

size_t 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 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 isValid ( ) const
virtual
Returns
Whether or not the decoder is valid.
Return values
ERR_INVALID_ARGThe passed data is not large enough.

Reimplemented in Decoder.

◆ resolve() [1/3]

void 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 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 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.