COMMS
Template library intended to help with implementation of communication protocols.
Loading...
Searching...
No Matches
VersionStorage.h
1//
2// Copyright 2017 - 2026 (C). Alex Robenko. All rights reserved.
3//
4// SPDX-License-Identifier: MPL-2.0
5//
6// This Source Code Form is subject to the terms of the Mozilla Public
7// License, v. 2.0. If a copy of the MPL was not distributed with this
8// file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#pragma once
11
12#include <utility>
13
14namespace comms
15{
16
17namespace field
18{
19
20namespace adapter
21{
22
23template <typename TBase>
24class VersionStorage : public TBase
25{
26 using BaseImpl = TBase;
27public:
28
29 using ValueType = typename BaseImpl::ValueType;
30 using VersionType = typename BaseImpl::VersionType;
31
32 VersionStorage() = default;
33
34 explicit VersionStorage(const ValueType& val)
35 : BaseImpl(val)
36 {
37 }
38
39 explicit VersionStorage(ValueType&& val)
40 : BaseImpl(std::move(val))
41 {
42 }
43
44 VersionStorage(const VersionStorage&) = default;
45 VersionStorage(VersionStorage&&) = default;
46 VersionStorage& operator=(const VersionStorage&) = default;
47 VersionStorage& operator=(VersionStorage&&) = default;
48
49 static constexpr bool isVersionDependent()
50 {
51 return true;
52 }
53
54 VersionType getVersion() const
55 {
56 return m_version;
57 }
58
59 bool setVersion(VersionType val)
60 {
61 bool updated = BaseImpl::setVersion(val);
62 if (m_version != val) {
63 m_version = val;
64 return true;
65 }
66 return updated;
67 }
68
69private:
70 VersionType m_version = static_cast<VersionType>(0);
71};
72
73} // namespace adapter
74
75} // namespace field
76
77} // namespace comms
78
comms::option::def::VersionType< T > VersionType
Same as comms::option::def::VersionType.
Definition options.h:1930
comms::option::def::VersionStorage VersionStorage
Same as comms::option::def::VersionStorage.
Definition options.h:1957
Main namespace for all classes / functions of COMMS library.
STL namespace.