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