21COMMS_MSVC_WARNING_PUSH
22COMMS_MSVC_WARNING_DISABLE(4100)
34struct FieldVersionDependentCheckHelper
36 template <
typename TField>
37 constexpr bool operator()()
const
39 return TField::isVersionDependent();
42 template <
typename TField>
43 constexpr bool operator()(
bool soFar)
const
45 return TField::isVersionDependent() || soFar;
50struct FieldMaxLengthCalcHelper
52 template <
typename TField>
53 constexpr std::size_t operator()(std::size_t val)
const
55 return val >= TField::maxLength() ? val : TField::maxLength();
60struct FieldMinLengthSumCalcHelper
62 template <
typename TField>
63 constexpr std::size_t operator()(std::size_t sum)
const
65 return sum + TField::minLength();
70struct FieldMaxLengthSumCalcHelper
72 template <
typename TField>
73 constexpr std::size_t operator()(std::size_t sum)
const
75 return sum + TField::maxLength();
79template <
bool THasBitLengthLimit>
80struct FieldBitLengthRetrieveHelper
82 template <
typename TField>
84 std::integral_constant<
86 TField::ParsedOptions::FixedBitLength
91struct FieldBitLengthRetrieveHelper<false>
93 template <
typename TField>
95 std::integral_constant<
97 TField::maxLength() * std::numeric_limits<std::uint8_t>::digits
101template <
typename...>
102struct FieldTotalBitLengthSumCalcHelper
104 template <
typename TField>
105 constexpr std::size_t operator()(std::size_t sum)
const
107 return sum + FieldBitLengthRetrieveHelper<TField::ParsedOptions::HasFixedBitLengthLimit>::template Type<TField>::value;
111template <
typename...>
112struct FieldLengthSumCalcHelper
114 template <
typename TField>
115 constexpr std::size_t operator()(std::size_t sum,
const TField& field)
const
117 return sum + field.length();
121template <
typename...>
122struct FieldHasWriteNoStatusHelper
124 constexpr FieldHasWriteNoStatusHelper() =
default;
126 template <
typename TField>
127 constexpr bool operator()(
bool soFar)
const
129 return TField::hasWriteNoStatus() && soFar;
134struct FieldNonDefaultRefreshCheckHelper
136 template <
typename TField>
137 constexpr bool operator()()
const
139 return TField::hasNonDefaultRefresh();
142 template <
typename TField>
143 constexpr bool operator()(
bool soFar)
const
145 return TField::hasNonDefaultRefresh() || soFar;
150struct FieldValidCheckHelper
152 template <
typename TField>
153 constexpr bool operator()(
bool soFar,
const TField& field)
const
155 return soFar && field.valid();
159template <
typename...>
160struct FieldRefreshHelper
162 template <
typename TField>
163 bool operator()(
bool soFar, TField& field)
const
165 return field.refresh() || soFar;
169template <
typename TIter>
173 FieldReadHelper(ErrorStatus& es, TIter& iter, std::size_t& len) :
180 template <
typename TField>
181 void operator()(TField& field)
187 auto fromIter = m_iter;
188 m_es = field.read(m_iter, m_len);
190 m_len -=
static_cast<std::size_t
>(std::distance(fromIter, m_iter));
200template <
typename TIter>
201class FieldReadNoStatusHelper
204 FieldReadNoStatusHelper(TIter& iter)
209 template <
typename TField>
210 void operator()(TField& field)
212 field.readNoStatus(m_iter);
219template <
typename TIter>
220class FieldWriteHelper
223 FieldWriteHelper(ErrorStatus& es, TIter& iter, std::size_t len)
230 template <
typename TField>
231 void operator()(
const TField& field)
237 m_es = field.write(m_iter, m_len);
239 m_len -= field.length();
249template <
typename TIter>
250class FieldWriteNoStatusHelper
253 FieldWriteNoStatusHelper(TIter& iter)
258 template <
typename TField>
259 void operator()(
const TField& field)
261 field.writeNoStatus(m_iter);
268template <
typename...>
269struct FieldReadNoStatusDetectHelper
271 template <
typename TField>
272 constexpr bool operator()()
const
274 return TField::hasReadNoStatus();
277 template <
typename TField>
278 constexpr bool operator()(
bool soFar)
const
280 return TField::hasReadNoStatus() && soFar;
285struct FieldWriteNoStatusDetectHelper
287 template <
typename TField>
288 constexpr bool operator()()
const
290 return TField::hasWriteNoStatus();
293 template <
typename TField>
294 constexpr bool operator()(
bool soFar)
const
296 return TField::hasWriteNoStatus() && soFar;
300template <
typename...>
301struct FieldCanWriteCheckHelper
303 template <
typename TField>
304 constexpr bool operator()(
bool soFar,
const TField& field)
const
306 return soFar && field.canWrite();
310template <
typename TVersionType>
311struct FieldVersionUpdateHelper
313 FieldVersionUpdateHelper(TVersionType version) : m_version(
version) {}
315 template <
typename TField>
316 bool operator()(
bool updated, TField& field)
const
318 using FieldVersionType =
typename std::decay<
decltype(field)>::type::VersionType;
319 return field.setVersion(
static_cast<FieldVersionType
>(m_version)) || updated;
323 const TVersionType m_version =
static_cast<TVersionType
>(0);
332COMMS_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:19
@ Success
Used to indicate successful outcome of the operation.
constexpr unsigned version()
Version of the COMMS library as single numeric value.
Definition version.h:66