COMMS
Template library intended to help with implementation of communication protocols.
|
#include "comms/field/IntValue.h"
Field that represent integral value.
Public Types | |
using | CommsTag = typename BaseImpl::CommsTag |
Tag indicating type of the field. | |
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. More... | |
using | ParsedOptions = details::OptionsParser< TOptions... > |
All the options provided to this class bundled into struct. | |
using | ScalingRatio = typename ParsedOptions::ScalingRatio |
Scaling ratio defined by the comms::option::def::ScalingRatio option. More... | |
using | UnitsRatio = typename ParsedOptions::UnitsRatio |
Scaling ratio determined by the forced units via the comms::option::def::Units* option. More... | |
using | UnitsType = typename ParsedOptions::UnitsType |
Units type defined by any of the comms::option::def::Units* option. More... | |
using | ValueType = typename BaseImpl::ValueType |
Type of underlying integral value. More... | |
using | VersionType = typename BaseImpl::VersionType |
Version type. | |
Public Member Functions | |
IntValue ()=default | |
Default constructor. More... | |
IntValue (const IntValue &)=default | |
Copy constructor. | |
IntValue (const ValueType &val) | |
Constructor. | |
~IntValue () noexcept=default | |
Destructor. | |
bool | canWrite () const |
Check of whether the field has a consistent value for writing. | |
int | getForcedLength () const |
Get forced serialization length. More... | |
template<typename TRet > | |
constexpr TRet | getScaled () const |
Scales value according to ratio specified in provided comms::option::def::ScalingRatio option. More... | |
const ValueType & | getValue () const |
Get value. More... | |
VersionType | getVersion () const |
Get version of the field. More... | |
constexpr std::size_t | length () const |
Get length required to serialise the current field value. More... | |
IntValue & | operator= (const IntValue &)=default |
Copy assignment. | |
template<typename TIter > | |
ErrorStatus | read (TIter &iter, std::size_t size) |
Read field value from input data sequence. More... | |
template<typename TIter > | |
void | readNoStatus (TIter &iter) |
Read field value from input data sequence without error check and status report. More... | |
bool | refresh () |
Refresh the field's value. More... | |
template<typename TRet > | |
constexpr TRet | scaleAs () const |
Same as getScaled() | |
void | setForcedLength (int len) |
Force serialization length of the field. More... | |
template<typename TScaled > | |
void | setScaled (TScaled val) |
Opposite operation to getScaled(). More... | |
template<typename U > | |
void | setValue (U &&val) |
Set value. More... | |
bool | setVersion (VersionType version) |
Default implementation of version update. More... | |
bool | valid () const |
Check validity of the field value. | |
ValueType & | value () |
Get access to integral value storage. | |
const ValueType & | value () const |
Get access to integral value storage. | |
template<typename TIter > | |
ErrorStatus | write (TIter &iter, std::size_t size) const |
Write current field value to output data sequence. More... | |
template<typename TIter > | |
void | writeNoStatus (TIter &iter) const |
Write current field value to output data sequence without error check and status report. More... | |
Static Public Member Functions | |
static constexpr bool | canWrite () |
Default check of whether the field has a consistent value for writing. More... | |
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 | 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 | hasScaling () |
Compile time inquiry of whether scaling ratio has been provided via comms::option::def::ScalingRatio option. | |
static constexpr bool | hasUnits () |
Compile time inquiry of whether units have been set via any of the comms::option::def::Units* options. | |
static constexpr bool | hasVarLength () |
Compile time inquiry of whether comms::option::def::VarLength option has been used. | |
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. More... | |
static constexpr ValueType | maxValue () |
Get maximal numeric value the field can hold. | |
static constexpr std::size_t | minLength () |
Get minimal length that is required to serialise field of this type. More... | |
static constexpr ValueType | minValue () |
Get minimal numeric value the field can hold. | |
static constexpr bool | valid () |
Default validity check. More... | |
Static Protected Member Functions | |
template<typename T , typename TIter > | |
static T | readData (TIter &iter) |
Read data from input buffer. More... | |
template<typename T , std::size_t TSize, typename TIter > | |
static T | readData (TIter &iter) |
Read partial data from input buffer. More... | |
template<typename T , typename TIter > | |
static void | writeData (T value, TIter &iter) |
Write data into the output buffer. More... | |
template<std::size_t TSize, typename T , typename TIter > | |
static void | writeData (T value, TIter &iter) |
Write partial data into the output buffer. More... | |
Related Functions | |
(Note that these are not member functions.) | |
template<typename T > | |
constexpr bool | isIntValue () |
Compile time check function of whether a provided type is any variant of comms::field::IntValue. More... | |
template<typename TFieldBase , typename T , typename... TOptions> | |
bool | operator!= (const IntValue< TFieldBase, T, TOptions... > &field1, const IntValue< TFieldBase, T, TOptions... > &field2) noexcept |
Non-equality comparison operator. More... | |
template<typename TFieldBase , typename T , typename... TOptions> | |
bool | operator< (const IntValue< TFieldBase, T, TOptions... > &field1, const IntValue< TFieldBase, T, TOptions... > &field2) noexcept |
Equivalence comparison operator. More... | |
template<typename TFieldBase , typename T , typename... TOptions> | |
bool | operator== (const IntValue< TFieldBase, T, TOptions... > &field1, const IntValue< TFieldBase, T, TOptions... > &field2) noexcept |
Equality comparison operator. More... | |
template<typename TFieldBase , typename T , typename... TOptions> | |
const IntValue< TFieldBase, T, TOptions... > & | toFieldBase (const IntValue< TFieldBase, T, TOptions... > &field) |
Upcast type of the field definition to its parent comms::field::IntValue type in order to have access to its internal types. | |
template<typename TFieldBase , typename T , typename... TOptions> | |
IntValue< TFieldBase, T, TOptions... > & | toFieldBase (IntValue< TFieldBase, T, TOptions... > &field) |
Upcast type of the field definition to its parent comms::field::IntValue type in order to have access to its internal types. | |
using comms::field::IntValue< TFieldBase, T, 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::IntValue< TFieldBase, T, TOptions >::ScalingRatio = typename ParsedOptions::ScalingRatio |
Scaling ratio defined by the comms::option::def::ScalingRatio option.
Equals to std::ratio<1, 1> if the option hasn't been used
using comms::field::IntValue< TFieldBase, T, TOptions >::UnitsRatio = typename ParsedOptions::UnitsRatio |
Scaling ratio determined by the forced units via the comms::option::def::Units* option.
Equals to std::ratio<1, 1> if the option hasn't been used.
using comms::field::IntValue< TFieldBase, T, TOptions >::UnitsType = typename ParsedOptions::UnitsType |
Units type defined by any of the comms::option::def::Units* option.
Aliased to void if no relevant options is used.
using comms::field::IntValue< TFieldBase, T, TOptions >::ValueType = typename BaseImpl::ValueType |
Type of underlying integral value.
Same as template parameter T to this class.
|
default |
Default constructor.
Initialises internal value to 0.
|
staticconstexprinherited |
Default check of whether the field has a consistent value for writing.
int comms::field::IntValue< TFieldBase, T, TOptions >::getForcedLength | ( | ) | const |
Get forced serialization length.
|
constexpr |
Scales value according to ratio specified in provided comms::option::def::ScalingRatio option.
If comms::option::def::ScalingRatio option wasn't used, then comms::option::def::ScalingRatio<1,1> is assumed.
TRet | Return type for the scaled value. |
const ValueType& comms::field::IntValue< TFieldBase, T, TOptions >::getValue | ( | ) | const |
Get value.
Implemented by calling value(), but can be overriden in the derived class
VersionType comms::field::IntValue< TFieldBase, T, TOptions >::getVersion | ( | ) | const |
Get version of the field.
Exists only if comms::option::def::VersionStorage option has been provided.
|
constexpr |
Get length required to serialise the current field value.
|
staticconstexpr |
Get maximal length that is required to serialise field of this type.
|
staticconstexpr |
Get minimal length that is required to serialise field of this type.
ErrorStatus comms::field::IntValue< TFieldBase, T, TOptions >::read | ( | TIter & | iter, |
std::size_t | size | ||
) |
Read field value from input data sequence.
[in,out] | iter | Iterator to read the data. |
[in] | size | 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::IntValue< TFieldBase, T, 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::IntValue< TFieldBase, T, TOptions >::refresh | ( | ) |
Refresh the field's value.
void comms::field::IntValue< TFieldBase, T, TOptions >::setForcedLength | ( | int | len | ) |
Force serialization length of the field.
Available only when comms::option::def::AvailableLengthLimit option is used for field definition.
[in] | len | Forced serialization length.
|
void comms::field::IntValue< TFieldBase, T, TOptions >::setScaled | ( | TScaled | val | ) |
Opposite operation to getScaled().
Allows to assign scaled value, assigns "(val * Scaling_Denom) / Scaling_Num" to the value of the field.
[in] | val | Scaled value. |
void comms::field::IntValue< TFieldBase, T, TOptions >::setValue | ( | U && | val | ) |
Set value.
Implemented as re-assigning to value(), but can be overriden in the derived class.
bool comms::field::IntValue< TFieldBase, T, TOptions >::setVersion | ( | VersionType | version | ) |
Default implementation of version update.
|
staticconstexprinherited |
Default validity check.
Always returns true, can be overriden by the derived class
ErrorStatus comms::field::IntValue< TFieldBase, T, TOptions >::write | ( | TIter & | iter, |
std::size_t | size | ||
) | const |
Write current field value to output data sequence.
[in,out] | iter | Iterator to write the data. |
[in] | size | 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::IntValue< TFieldBase, T, 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::IntValue.
T | Any type. |
|
related |
Non-equality comparison operator.
[in] | field1 | First field. |
[in] | field2 | Second field. |
|
related |
Equivalence comparison operator.
[in] | field1 | First field. |
[in] | field2 | Second field. |
|
related |
Equality comparison operator.
[in] | field1 | First field. |
[in] | field2 | Second field. |