COMMS
Template library intended to help with implementation of communication protocols.
|
#include "comms/field/ArrayList.h"
Field that represents a sequential collection of fields.
By default uses std::vector, for internal storage, unless comms::option::app::FixedSizeStorage option is used, which forces usage of comms::util::StaticVector instead.
Public Types | |
using | CommsTag = typename BaseImpl::CommsTag |
Tag indicating type of the field. | |
using | ElementType = typename BaseImpl::ElementType |
Type of the element. | |
using | ElemFixedSerLengthFieldPrefix = typename ParsedOptions::SequenceElemFixedSerLengthFieldPrefix |
Type of element's fixed length field prefix specified via comms::option::def::SequenceElemFixedSerLengthFieldPrefix. | |
using | ElemSerLengthFieldPrefix = typename ParsedOptions::SequenceElemSerLengthFieldPrefix |
Type of element's length field prefix specified via comms::option::def::SequenceElemSerLengthFieldPrefix. | |
using | Endian = typename BaseImpl::Endian |
Endian used for serialisation. | |
using | FieldBase = TFieldBase |
Base class provided in the first template parameter. | |
using | FieldType = typename ParsedOptions::FieldType |
Type of actual extending field specified via comms::option::def::FieldType. | |
using | ParsedOptions = details::OptionsParser< TOptions... > |
All the options provided to this class bundled into struct. | |
using | SerLengthFieldPrefix = typename ParsedOptions::SequenceSerLengthFieldPrefix |
Type of length field prefix specified via comms::option::def::SequenceSerLengthFieldPrefix. | |
using | SizeFieldPrefix = typename ParsedOptions::SequenceSizeFieldPrefix |
Type of size field prefix specified via comms::option::def::SequenceSizeFieldPrefix. | |
using | TerminationFieldSuffix = typename ParsedOptions::SequenceTerminationFieldSuffix |
Type of termination field suffix specified via comms::option::def::SequenceTerminationFieldSuffix. | |
using | TrailingFieldSuffix = typename ParsedOptions::SequenceTrailingFieldSuffix |
Type of trailing field suffix specified via comms::option::def::SequenceTrailingFieldSuffix. | |
using | ValueType = typename BaseImpl::ValueType |
Type of underlying value. | |
using | VersionType = typename BaseImpl::VersionType |
Version type. | |
Public Member Functions | |
ArrayList ()=default | |
Default constructor. | |
ArrayList (ArrayList &&)=default | |
Move constructor. | |
ArrayList (const ArrayList &)=default | |
Copy constructor. | |
ArrayList (const ValueType &val) | |
Value constructor. | |
ArrayList (ValueType &&val) | |
Value constructor. | |
~ArrayList () noexcept=default | |
Destructor. | |
bool | canWrite () const |
Check of whether the field has a consistent value for writing. | |
void | clearReadElemCount () |
Clear forcing of the number of elements that must be read in the next read() invocation. | |
void | clearReadElemLengthForcing () |
Clear forcing the serialisation length of the single element. | |
void | clearReadLengthForcing () |
Clear forcing of the available length in the next read() invocation. | |
void | forceReadElemCount (std::size_t count) |
Force number of elements that must be read in the next read() invocation. | |
void | forceReadElemLength (std::size_t count) |
Force serialisation length of a single element. | |
void | forceReadLength (std::size_t count) |
Force available length for the next read() invocation. | |
const ValueType & | getValue () const |
Get value. | |
VersionType | getVersion () const |
Get version of the field. | |
constexpr std::size_t | length () const |
Get length of serialised data. | |
ArrayList & | operator= (ArrayList &&)=default |
Move assignment. | |
ArrayList & | operator= (const ArrayList &)=default |
Copy assignment. | |
template<typename TIter > | |
ErrorStatus | read (TIter &iter, std::size_t len) |
Read field value from input data sequence. | |
template<typename TIter > | |
void | readNoStatus (TIter &iter) |
Read field value from input data sequence without error check and status report. | |
bool | refresh () |
Refresh the field. | |
template<typename U > | |
void | setValue (U &&val) |
Set value. | |
bool | setVersion (VersionType version) |
Default implementation of version update. | |
auto | terminationFieldSuffix () -> decltype(BaseImpl::terminationFieldSuffix()) |
Access list termination field. | |
auto | terminationFieldSuffix () const -> decltype(BaseImpl::terminationFieldSuffix()) |
Access list termination field (const variant) | |
bool | valid () const |
Check validity of the field value. | |
ValueType & | value () |
Get access to the value storage. | |
const ValueType & | value () const |
Get access to the value storage. | |
template<typename TIter > | |
ErrorStatus | write (TIter &iter, std::size_t len) const |
Write current field value to output data sequence. | |
template<typename TIter > | |
void | writeNoStatus (TIter &iter) const |
Write current field value to output data sequence without error check and status report. | |
Static Public Member Functions | |
static constexpr bool | canWrite () |
Default check of whether the field has a consistent value for writing. | |
static constexpr std::size_t | fixedSize () |
Compile time inquiry of fixed size provided via comms::option::def::SequenceFixedSize option. | |
static constexpr bool | hasElemFixedSerLengthFieldPrefix () |
Compile time inquiry of whether comms::option::def::SequenceElemFixedSerLengthFieldPrefix option has been used. | |
static constexpr bool | hasElemSerLengthFieldPrefix () |
Compile time inquiry of whether comms::option::def::SequenceElemSerLengthFieldPrefix option has been used. | |
static constexpr bool | hasEmptySerialization () |
Compile time inquiry of whether comms::option::def::EmptySerialization option has been used. | |
static constexpr bool | hasFailOnInvalid () |
Compile time inquiry of whether comms::option::def::FailOnInvalid option has been used. | |
static constexpr bool | hasFieldType () |
Compile time inquiry of whether comms::option::def::FieldType option has been used. | |
static constexpr bool | hasFixedSize () |
Compile time inquiry of whether comms::option::def::SequenceFixedSize option has been used. | |
static constexpr bool | hasIgnoreInvalid () |
Compile time inquiry of whether comms::option::def::IgnoreInvalid option has been used. | |
static constexpr bool | hasNonDefaultRefresh () |
Compile time check if this class has non-default refresh functionality. | |
static constexpr bool | hasReadNoStatus () |
Compile time check of whether the field has proper readNoStatus() member function. | |
static constexpr bool | hasSerLengthFieldPrefix () |
Compile time inquiry of whether comms::option::def::SequenceSerLengthFieldPrefix option has been used. | |
static constexpr bool | hasSizeFieldPrefix () |
Compile time inquiry of whether comms::option::def::SequenceSizeFieldPrefix option has been used. | |
static constexpr bool | hasTerminationFieldSuffix () |
Compile time inquiry of whether comms::option::def::SequenceTerminationFieldSuffix option has been used. | |
static constexpr bool | hasTrailingFieldSuffix () |
Compile time inquiry of whether comms::option::def::SequenceTrailingFieldSuffix option has been used. | |
static constexpr bool | hasVarLength () |
Default check of whether the field has variable length definition via comms::option::def::VarLength option. | |
static constexpr bool | hasWriteNoStatus () |
Compile time check of whether the field has proper writeNoStatus() member function. | |
static constexpr bool | isVersionDependent () |
Compile time check if this class is version dependent. | |
static constexpr std::size_t | maxLength () |
Get maximal length that is required to serialise field of this type. | |
static constexpr std::size_t | minLength () |
Get minimal length that is required to serialise field of this type. | |
static constexpr bool | valid () |
Default validity check. | |
Static Protected Member Functions | |
template<typename T , typename TIter > | |
static T | readData (TIter &iter) |
Read data from input buffer. | |
template<typename T , std::size_t TSize, typename TIter > | |
static T | readData (TIter &iter) |
Read partial data from input buffer. | |
template<typename T , typename TIter > | |
static void | writeData (T value, TIter &iter) |
Write data into the output buffer. | |
template<std::size_t TSize, typename T , typename TIter > | |
static void | writeData (T value, TIter &iter) |
Write partial data into the output buffer. | |
Related Symbols | |
(Note that these are not member symbols.) | |
template<typename T > | |
constexpr bool | isArrayList () |
Compile time check function of whether a provided type is any variant of comms::field::ArrayList. | |
template<typename TFieldBase , typename TElement , typename... TOptions> | |
bool | operator!= (const ArrayList< TFieldBase, TElement, TOptions... > &field1, const ArrayList< TFieldBase, TElement, TOptions... > &field2) noexcept |
Non-equality comparison operator. | |
template<typename TFieldBase , typename TElement , typename... TOptions> | |
bool | operator< (const ArrayList< TFieldBase, TElement, TOptions... > &field1, const ArrayList< TFieldBase, TElement, TOptions... > &field2) noexcept |
Equivalence comparison operator. | |
template<typename TFieldBase , typename TElement , typename... TOptions> | |
bool | operator== (const ArrayList< TFieldBase, TElement, TOptions... > &field1, const ArrayList< TFieldBase, TElement, TOptions... > &field2) noexcept |
Equality comparison operator. | |
template<typename TFieldBase , typename TElement , typename... TOptions> | |
ArrayList< TFieldBase, TElement, TOptions... > & | toFieldBase (ArrayList< TFieldBase, TElement, TOptions... > &field) |
Upcast type of the field definition to its parent comms::field::ArrayList type in order to have access to its internal types. | |
template<typename TFieldBase , typename TElement , typename... TOptions> | |
const ArrayList< TFieldBase, TElement, TOptions... > & | toFieldBase (const ArrayList< TFieldBase, TElement, TOptions... > &field) |
Upcast type of the field definition to its parent comms::field::ArrayList type in order to have access to its internal types. | |
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::ElemFixedSerLengthFieldPrefix = typename ParsedOptions::SequenceElemFixedSerLengthFieldPrefix |
Type of element's fixed length field prefix specified via comms::option::def::SequenceElemFixedSerLengthFieldPrefix.
void if comms::option::def::SequenceElemFixedSerLengthFieldPrefix is not used.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::ElemSerLengthFieldPrefix = typename ParsedOptions::SequenceElemSerLengthFieldPrefix |
Type of element's length field prefix specified via comms::option::def::SequenceElemSerLengthFieldPrefix.
void if comms::option::def::SequenceElemSerLengthFieldPrefix is not used.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::FieldType = typename ParsedOptions::FieldType |
Type of actual extending field specified via comms::option::def::FieldType.
void if comms::option::def::FieldType hasn't been applied.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::SerLengthFieldPrefix = typename ParsedOptions::SequenceSerLengthFieldPrefix |
Type of length field prefix specified via comms::option::def::SequenceSerLengthFieldPrefix.
void if comms::option::def::SequenceSerLengthFieldPrefix is not used.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::SizeFieldPrefix = typename ParsedOptions::SequenceSizeFieldPrefix |
Type of size field prefix specified via comms::option::def::SequenceSizeFieldPrefix.
void if comms::option::def::SequenceSizeFieldPrefix is not used.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::TerminationFieldSuffix = typename ParsedOptions::SequenceTerminationFieldSuffix |
Type of termination field suffix specified via comms::option::def::SequenceTerminationFieldSuffix.
void if comms::option::def::SequenceTerminationFieldSuffix is not used.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::TrailingFieldSuffix = typename ParsedOptions::SequenceTrailingFieldSuffix |
Type of trailing field suffix specified via comms::option::def::SequenceTrailingFieldSuffix.
void if comms::option::def::SequenceTrailingFieldSuffix is not used.
using comms::field::ArrayList< TFieldBase, TElement, TOptions >::ValueType = typename BaseImpl::ValueType |
Type of underlying value.
If comms::option::app::FixedSizeStorage option is NOT used, the ValueType is std::vector<TElement>, otherwise it becomes comms::util::StaticVector<TElement, TSize>, where TSize is a size provided to comms::option::app::FixedSizeStorage option.
|
staticconstexprinherited |
Default check of whether the field has a consistent value for writing.
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::clearReadElemCount | ( | ) |
Clear forcing of the number of elements that must be read in the next read() invocation.
Exists only if comms::option::def::SequenceSizeForcingEnabled option has been used.
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::clearReadElemLengthForcing | ( | ) |
Clear forcing the serialisation length of the single element.
Exists only if comms::option::def::SequenceElemLengthForcingEnabled option has been used.
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::clearReadLengthForcing | ( | ) |
Clear forcing of the available length in the next read() invocation.
Exists only if comms::option::def::SequenceLengthForcingEnabled option has been used.
|
staticconstexpr |
Compile time inquiry of fixed size provided via comms::option::def::SequenceFixedSize option.
If the comms::option::def::SequenceFixedSize option hasn't been used std::numeric_limits<std::size_t>::max() is returned.
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::forceReadElemCount | ( | std::size_t | count | ) |
Force number of elements that must be read in the next read() invocation.
Exists only if comms::option::def::SequenceSizeForcingEnabled option has been used.
[in] | count | Number of elements to read during following read operation. |
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::forceReadElemLength | ( | std::size_t | count | ) |
Force serialisation length of a single element.
The function can be used to force a serialisation length of a single element within the ArrayList. Exists only if comms::option::def::SequenceElemLengthForcingEnabled option has been used.
[in] | count | Number of elements to read during following read operation. |
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::forceReadLength | ( | std::size_t | count | ) |
Force available length for the next read() invocation.
Exists only if comms::option::def::SequenceLengthForcingEnabled option has been used.
[in] | count | Number of elements to read during following read operation. |
const ValueType & comms::field::ArrayList< TFieldBase, TElement, TOptions >::getValue | ( | ) | const |
Get value.
Implemented by calling value(), but can be overriden in the derived class
VersionType comms::field::ArrayList< TFieldBase, TElement, TOptions >::getVersion | ( | ) | const |
Get version of the field.
Exists only if comms::option::def::VersionStorage option has been provided.
|
staticconstexprinherited |
Default check of whether the field has variable length definition via comms::option::def::VarLength option.
ErrorStatus comms::field::ArrayList< TFieldBase, TElement, TOptions >::read | ( | TIter & | iter, |
std::size_t | len | ||
) |
Read field value from input data sequence.
By default, the read operation will try to consume all the data available, unless size limiting option (such as comms::option::def::SequenceSizeFieldPrefix, comms::option::def::SequenceFixedSize, comms::option::def::SequenceSizeForcingEnabled, comms::option::def::SequenceLengthForcingEnabled) is used.
[in,out] | iter | Iterator to read the data. |
[in] | len | Number of bytes available for reading. |
|
staticprotectedinherited |
Read data from input buffer.
Use this function to read data from the intput buffer maintained by the caller. The endianness of the data will be as specified in options of the class.
T | Return type |
TIter | Type of input iterator |
[in,out] | iter | Input iterator. |
|
staticprotectedinherited |
Read partial data from input buffer.
Use this function to read data from the intput buffer maintained by the caller. The endianness of the data will be as specified in options of the class.
T | Return type |
TSize | number of bytes to read |
TIter | Type of input iterator |
[in,out] | iter | Input iterator. |
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::readNoStatus | ( | TIter & | iter | ) |
Read field value from input data sequence without error check and status report.
Similar to read(), but doesn't perform any correctness checks and doesn't report any failures.
[in,out] | iter | Iterator to read the data. |
bool comms::field::ArrayList< TFieldBase, TElement, TOptions >::refresh | ( | ) |
Refresh the field.
Calls refresh() on all the elements (if they are fields and not raw bytes).
Returns true if any of the elements has been updated, false otherwise.
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::setValue | ( | U && | val | ) |
Set value.
Implemented as re-assigning to value(), but can be overriden in the derived class.
bool comms::field::ArrayList< TFieldBase, TElement, TOptions >::setVersion | ( | VersionType | version | ) |
Default implementation of version update.
auto comms::field::ArrayList< TFieldBase, TElement, TOptions >::terminationFieldSuffix | ( | ) | -> decltype(BaseImpl::terminationFieldSuffix()) |
Access list termination field.
Exists only if comms::option::def::SequenceTerminationFieldSuffix option has been used. The function can be used to access the termination field value after the read and/or before the write operations.
auto comms::field::ArrayList< TFieldBase, TElement, TOptions >::terminationFieldSuffix | ( | ) | const -> decltype(BaseImpl::terminationFieldSuffix()) |
Access list termination field (const variant)
Exists only if comms::option::def::SequenceTerminationFieldSuffix option has been used. The function can be used to access the termination field value after the read and/or before the write operations.
|
staticconstexprinherited |
Default validity check.
Always returns true, can be overriden by the derived class
bool comms::field::ArrayList< TFieldBase, TElement, TOptions >::valid | ( | ) | const |
Check validity of the field value.
The collection is valid if all the elements are valid.
ErrorStatus comms::field::ArrayList< TFieldBase, TElement, TOptions >::write | ( | TIter & | iter, |
std::size_t | len | ||
) | const |
Write current field value to output data sequence.
By default, the write operation will write all the elements the field contains. If comms::option::def::SequenceFixedSize option is used, the number of elements, that is going to be written, is exactly as the option specifies. If underlying vector storage doesn't contain enough data, the default constructed elements will be appended to the written sequence until the required amount of elements is reached.
[in,out] | iter | Iterator to write the data. |
[in] | len | Maximal number of bytes that can be written. |
|
staticprotectedinherited |
Write data into the output buffer.
Use this function to write data to the the buffer maintained by the caller. The endianness of the data will be as specified in the options provided to the class.
T | Type of the value to write. Must be integral. |
Type | of output iterator |
[in] | value | Integral type value to be written. |
[in,out] | iter | Output iterator. |
|
staticprotectedinherited |
Write partial data into the output buffer.
Use this function to write partial data to the buffer maintained by the caller. The endianness of the data will be as specified the class options.
TSize | Length of the value in bytes known in compile time. |
T | Type of the value to write. Must be integral. |
TIter | Type of output iterator |
[in] | value | Integral type value to be written. |
[in,out] | iter | Output iterator. |
void comms::field::ArrayList< TFieldBase, TElement, TOptions >::writeNoStatus | ( | TIter & | iter | ) | const |
Write current field value to output data sequence without error check and status report.
Similar to write(), but doesn't perform any correctness checks and doesn't report any failures.
[in,out] | iter | Iterator to write the data. |
|
related |
Compile time check function of whether a provided type is any variant of comms::field::ArrayList.
T | Any type. |
|
related |
Non-equality comparison operator.
[in] | field1 | First field. |
[in] | field2 | Second field. |
|
related |
Equivalence comparison operator.
Performs lexicographical compare of two array fields.
[in] | field1 | First field. |
[in] | field2 | Second field. |
|
related |
Equality comparison operator.
[in] | field1 | First field. |
[in] | field2 | Second field. |