27template <
typename TField>
 
   28class Optional : 
public 
   30            comms::option::def::Endian<typename TField::Endian>,
 
   31            comms::option::def::VersionType<typename TField::VersionType>
 
   43    using ValueType = TField;
 
   46    using CommsTag = comms::field::tag::Optional;
 
   50    explicit Optional(
const Field& fieldSrc, Mode mode = Mode::Tentative)
 
   56    explicit Optional(Field&& fieldSrc, Mode mode = Mode::Tentative)
 
   57      : m_field(
std::move(fieldSrc)),
 
   62    Optional(
const Optional&) = 
default;
 
   64    Optional(Optional&&) = 
default;
 
   66    ~Optional() noexcept = default;
 
   68    Optional& operator=(const Optional&) = default;
 
   70    Optional& operator=(Optional&&) = default;
 
   77    const Field& field()
 const 
   87    const ValueType& value()
 const 
   92    const ValueType& getValue()
 const 
   98    void setValue(T&& val)
 
  100        value() = std::forward<T>(val);
 
  108    void setMode(Mode val)
 
  114    std::size_t length()
 const 
  116        if (m_mode != Mode::Exists) {
 
  120        return m_field.length();
 
  123    static constexpr std::size_t minLength()
 
  128    static constexpr std::size_t maxLength()
 
  130        return Field::maxLength();
 
  135        if (m_mode == Mode::Missing) {
 
  139        return m_field.valid();
 
  143        if (m_mode != Mode::Exists) {
 
  146        return m_field.refresh();
 
  149    template <
typename TIter>
 
  152        if (m_mode == Mode::Missing) {
 
  156        if ((m_mode == Mode::Tentative) && (0U == len)) {
 
  157            m_mode = Mode::Missing;
 
  161        auto es = m_field.read(iter, len);
 
  163            m_mode = Mode::Exists;
 
  175        if (m_mode != Mode::Exists) {
 
  179        return m_field.canWrite();
 
  182    template <
typename TIter>
 
  183    ErrorStatus write(TIter& iter, std::size_t len)
 const 
  185        if (m_mode != Mode::Exists) {
 
  189        return m_field.write(iter, len);
 
  197    template <
typename TIter>
 
  198    void writeNoStatus(TIter& iter)
 const 
  200        if (m_mode != Mode::Exists) {
 
  204        m_field.writeNoStatus(iter);
 
  224    Mode m_mode = Mode::Tentative;
 
This file contains classes required for generic custom assertion functionality.
 
#define COMMS_ASSERT(expr)
Generic assert macro.
Definition Assert.h:170
 
This file contain definition of error statuses used by comms module.
 
Contains definition of comms::Field class.
 
Contains definition of the mode used for comms::field::Optional fields.
 
Base class to all the field classes.
Definition Field.h:33
 
static constexpr bool canWrite()
Default check of whether the field has a consistent value for writing.
Definition Field.h:100
 
static constexpr bool setVersion(VersionType)
Default version update functionality.
Definition Field.h:109
 
static constexpr bool isVersionDependent()
Default check of whether the field is version dependent.
Definition Field.h:63
 
static constexpr bool refresh()
Default refresh functionality.
Definition Field.h:56
 
static constexpr bool hasReadNoStatus()
Default check of whether the field has readNoStatus() member function.
Definition Field.h:77
 
typename BaseImpl::VersionType VersionType
Version type.
Definition Field.h:42
 
static constexpr bool hasNonDefaultRefresh()
Default check of whether the field has defines refresh functionality.
Definition Field.h:70
 
static constexpr bool hasWriteNoStatus()
Default check of whether the field has writeNoStatus() member function.
Definition Field.h:84
 
static constexpr bool valid()
Default validity check.
Definition Field.h:47
 
Contains definition of various tag classes.
 
OptionalMode
Mode to be used by comms::field::Optional.
Definition OptionalMode.h:22
 
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.
 
constexpr unsigned version()
Version of the COMMS library as single numeric value.
Definition version.h:64
 
Options to specify endian.
Definition options.h:172
 
Provide type to be used for versioning.
Definition options.h:1171