18COMMS_MSVC_WARNING_PUSH
19COMMS_MSVC_WARNING_DISABLE(4100)
31struct FieldVersionDependentCheckHelper
33 template <
typename TField>
34 constexpr bool operator()()
const
36 return TField::isVersionDependent();
39 template <
typename TField>
40 constexpr bool operator()(
bool soFar)
const
42 return TField::isVersionDependent() || soFar;
47struct FieldMaxLengthCalcHelper
49 template <
typename TField>
50 constexpr std::size_t operator()(std::size_t val)
const
52 return val >= TField::maxLength() ? val : TField::maxLength();
57struct FieldMinLengthSumCalcHelper
59 template <
typename TField>
60 constexpr std::size_t operator()(std::size_t sum)
const
62 return sum + TField::minLength();
67struct FieldMaxLengthSumCalcHelper
69 template <
typename TField>
70 constexpr std::size_t operator()(std::size_t sum)
const
72 return sum + TField::maxLength();
76template <
bool THasBitLengthLimit>
77struct FieldBitLengthRetrieveHelper
79 template <
typename TField>
81 std::integral_constant<
83 TField::ParsedOptions::FixedBitLength
88struct FieldBitLengthRetrieveHelper<false>
90 template <
typename TField>
92 std::integral_constant<
94 TField::maxLength() * std::numeric_limits<std::uint8_t>::digits
100struct FieldTotalBitLengthSumCalcHelper
102 template <
typename TField>
103 constexpr std::size_t operator()(std::size_t sum)
const
105 return sum + FieldBitLengthRetrieveHelper<TField::ParsedOptions::HasFixedBitLengthLimit>::template Type<TField>::value;
109template <
typename...>
110struct FieldLengthSumCalcHelper
112 template <
typename TField>
113 constexpr std::size_t operator()(std::size_t sum,
const TField& field)
const
115 return sum + field.length();
119template <
typename...>
120struct FieldHasWriteNoStatusHelper
122 constexpr FieldHasWriteNoStatusHelper() =
default;
124 template <
typename TField>
125 constexpr bool operator()(
bool soFar)
const
127 return TField::hasWriteNoStatus() && soFar;
132struct FieldNonDefaultRefreshCheckHelper
134 template <
typename TField>
135 constexpr bool operator()()
const
137 return TField::hasNonDefaultRefresh();
140 template <
typename TField>
141 constexpr bool operator()(
bool soFar)
const
143 return TField::hasNonDefaultRefresh() || soFar;
148struct FieldValidCheckHelper
150 template <
typename TField>
151 constexpr bool operator()(
bool soFar,
const TField& field)
const
153 return soFar && field.valid();
157template <
typename...>
158struct FieldRefreshHelper
160 template <
typename TField>
161 bool operator()(
bool soFar, TField& field)
const
163 return field.refresh() || soFar;
167template <
typename TIter>
171 FieldReadHelper(ErrorStatus& es, TIter& iter, std::size_t& len) :
178 template <
typename TField>
179 void operator()(TField& field)
185 auto fromIter = m_iter;
186 m_es = field.read(m_iter, m_len);
188 m_len -=
static_cast<std::size_t
>(std::distance(fromIter, m_iter));
199template <
typename TIter>
200class FieldReadNoStatusHelper
203 FieldReadNoStatusHelper(TIter& iter)
208 template <
typename TField>
209 void operator()(TField& field)
211 field.readNoStatus(m_iter);
218template <
typename TIter>
219class FieldWriteHelper
222 FieldWriteHelper(ErrorStatus& es, TIter& iter, std::size_t len)
229 template <
typename TField>
230 void operator()(
const TField& field)
236 m_es = field.write(m_iter, m_len);
238 m_len -= field.length();
248template <
typename TIter>
249class FieldWriteNoStatusHelper
252 FieldWriteNoStatusHelper(TIter& iter)
257 template <
typename TField>
258 void operator()(
const TField& field)
260 field.writeNoStatus(m_iter);
267template <
typename...>
268struct FieldReadNoStatusDetectHelper
270 template <
typename TField>
271 constexpr bool operator()()
const
273 return TField::hasReadNoStatus();
276 template <
typename TField>
277 constexpr bool operator()(
bool soFar)
const
279 return TField::hasReadNoStatus() && soFar;
284struct FieldWriteNoStatusDetectHelper
286 template <
typename TField>
287 constexpr bool operator()()
const
289 return TField::hasWriteNoStatus();
292 template <
typename TField>
293 constexpr bool operator()(
bool soFar)
const
295 return TField::hasWriteNoStatus() && soFar;
299template <
typename...>
300struct FieldCanWriteCheckHelper
302 template <
typename TField>
303 constexpr bool operator()(
bool soFar,
const TField& field)
const
305 return soFar && field.canWrite();
309template <
typename TVersionType>
310struct FieldVersionUpdateHelper
312 FieldVersionUpdateHelper(TVersionType version) : m_version(
version) {}
314 template <
typename TField>
315 bool operator()(
bool updated, TField& field)
const
317 using FieldVersionType =
typename std::decay<
decltype(field)>::type::VersionType;
318 return field.setVersion(
static_cast<FieldVersionType
>(m_version)) || updated;
322 const TVersionType m_version =
static_cast<TVersionType
>(0);
331COMMS_MSVC_WARNING_POP
Contains various compiler related definitions.
This file contain definition of error statuses used by comms module.
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