11#include "comms/field/basic/IntValue.h"
25template <
typename TFieldBase,
typename T>
26class EnumValue :
public TFieldBase
28 static_assert(std::is_enum<T>::value,
"T must be enum");
30 using UnderlyingType =
typename std::underlying_type<T>::type;
32 using BaseImpl = TFieldBase;
35 comms::field::basic::IntValue<
40 using IntValueType =
typename IntValueField::ValueType;
45 using SerialisedType =
typename IntValueField::ValueType;
47 using ScalingRatio =
typename IntValueField::ScalingRatio;
49 using CommsTag = comms::field::tag::Enum;
51 EnumValue() =
default;
53 explicit EnumValue(ValueType val)
58 EnumValue(
const EnumValue&) =
default;
59 EnumValue(EnumValue&&) =
default;
60 ~EnumValue() noexcept = default;
62 EnumValue& operator=(const EnumValue&) = default;
63 EnumValue& operator=(EnumValue&&) = default;
65 const ValueType& value()
const
75 const ValueType& getValue()
const
81 void setValue(U&& val)
83 value() =
static_cast<ValueType
>(std::forward<U>(val));
86 static constexpr std::size_t length()
88 return IntValueField::length();
91 static constexpr std::size_t minLength()
96 static constexpr std::size_t maxLength()
101 static constexpr SerialisedType toSerialised(ValueType val)
103 return IntValueField::toSerialised(
static_cast<IntValueType
>(val));
106 static constexpr ValueType fromSerialised(SerialisedType val)
108 return static_cast<ValueType
>(IntValueField::fromSerialised(val));
111 template <
typename TIter>
114 IntValueField intField;
115 auto es = intField.read(iter, size);
117 m_value =
static_cast<decltype(m_value)
>(intField.value());
122 template <
typename TIter>
123 void readNoStatus(TIter& iter)
125 IntValueField intField;
126 intField.readNoStatus(iter);
127 m_value =
static_cast<decltype(m_value)
>(intField.value());
130 template <
typename TIter>
131 ErrorStatus write(TIter& iter, std::size_t size)
const
133 return IntValueField(
static_cast<IntValueType
>(m_value)).write(iter, size);
136 template <
typename TIter>
137 void writeNoStatus(TIter& iter)
const
139 IntValueField(
static_cast<IntValueType
>(m_value)).writeNoStatus(iter);
143 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:1544
Main namespace for all classes / functions of COMMS library.
ErrorStatus
Error statuses reported by the Communication module.
Definition ErrorStatus.h:17
@ Success
Used to indicate successful outcome of the operation.