13#include "comms/field/basic/IntValue.h"
29template <
typename TFieldBase,
typename T>
30class EnumValue :
public TFieldBase
32 static_assert(std::is_enum<T>::value,
"T must be enum");
34 using UnderlyingType =
typename std::underlying_type<T>::type;
36 using BaseImpl = TFieldBase;
39 comms::field::basic::IntValue<
44 using IntValueType =
typename IntValueField::ValueType;
49 using SerialisedType =
typename IntValueField::ValueType;
51 using ScalingRatio =
typename IntValueField::ScalingRatio;
53 using CommsTag = comms::field::tag::Enum;
55 EnumValue() =
default;
57 explicit EnumValue(ValueType val)
62 EnumValue(
const EnumValue&) =
default;
63 EnumValue(EnumValue&&) =
default;
64 ~EnumValue() noexcept = default;
66 EnumValue& operator=(const EnumValue&) = default;
67 EnumValue& operator=(EnumValue&&) = default;
69 const ValueType& value()
const
79 const ValueType& getValue()
const
85 void setValue(U&& val)
87 value() =
static_cast<ValueType
>(std::forward<U>(val));
90 static constexpr std::size_t length()
92 return IntValueField::length();
95 static constexpr std::size_t minLength()
100 static constexpr std::size_t maxLength()
105 static constexpr SerialisedType toSerialised(ValueType val)
107 return IntValueField::toSerialised(
static_cast<IntValueType
>(val));
110 static constexpr ValueType fromSerialised(SerialisedType val)
112 return static_cast<ValueType
>(IntValueField::fromSerialised(val));
115 template <
typename TIter>
118 IntValueField intField;
119 auto es = intField.read(iter, size);
121 m_value =
static_cast<decltype(m_value)
>(intField.value());
126 template <
typename TIter>
127 void readNoStatus(TIter& iter)
129 IntValueField intField;
130 intField.readNoStatus(iter);
131 m_value =
static_cast<decltype(m_value)
>(intField.value());
134 template <
typename TIter>
135 ErrorStatus write(TIter& iter, std::size_t size)
const
137 return IntValueField(
static_cast<IntValueType
>(m_value)).write(iter, size);
140 template <
typename TIter>
141 void writeNoStatus(TIter& iter)
const
143 IntValueField(
static_cast<IntValueType
>(m_value)).writeNoStatus(iter);
147 ValueType m_value =
static_cast<ValueType
>(0);
This file contain definition of error statuses used by comms module.
Contains definition of various tag classes.
comms::option::def::ScalingRatio< TNum, TDenom > ScalingRatio
Same as comms::option::def::ScalingRatio.
Definition options.h:1557
Main namespace for all classes / functions of COMMS library.
ErrorStatus
Error statuses reported by the Communication module.
Definition ErrorStatus.h:19
@ Success
Used to indicate successful outcome of the operation.