13#include "comms/field/details/FieldOpHelpers.h"
32 template <
typename TField,
typename TIter>
38 auto& elem = field.createBack();
39 auto es = field.readElement(elem, iter, remLen);
41 field.value().pop_back();
49 template <
typename TField,
typename TIter>
50 static comms::ErrorStatus readSequenceN(TField& field, std::size_t count, TIter& iter, std::size_t& len)
54 auto& elem = field.createBack();
55 auto es = field.readElement(elem, iter, len);
57 field.value().pop_back();
65 template <
typename TField,
typename TIter>
66 static void readSequenceNoStatusN(TField& field, std::size_t count, TIter& iter)
70 auto& elem = field.createBack();
71 field.readElementNoStatus(elem, iter);
76 template <
typename TField>
77 static bool canWriteSequence(
const TField& field)
79 for (
auto& elem : field.value()) {
80 if (!field.canWriteElement(elem)) {
88 template <
typename TField,
typename TIter>
89 static comms::ErrorStatus writeSequence(
const TField& field, TIter& iter, std::size_t len)
92 auto remainingLen = len;
93 for (
auto& elem : field.value()) {
94 if (!field.canWriteElement(elem)) {
99 es = field.writeElement(elem, iter, remainingLen);
108 template <
typename TField,
typename TIter>
109 static void writeSequenceNoStatus(TField& field, TIter& iter)
111 for (
auto& elem : field.value()) {
112 field.writeElementNoStatus(elem, iter);
116 template <
typename TField,
typename TIter>
117 static comms::ErrorStatus writeSequenceN(
const TField& field, std::size_t count, TIter& iter, std::size_t& len)
120 for (
auto& elem : field.value()) {
125 es = field.writeElement(elem, iter, len);
136 template <
typename TField,
typename TIter>
137 static void writeSequenceNoStatusN(
const TField& field, std::size_t count, TIter& iter)
139 for (
auto& elem : field.value()) {
144 field.writeElementNoStatus(elem, iter);
149 template <
typename TIter>
150 static void advanceWriteIterator(TIter& iter, std::size_t len)
152 using IterType =
typename std::decay<
decltype(iter)>::type;
153 using ByteType =
typename std::iterator_traits<IterType>::value_type;
161 static constexpr std::size_t maxSupportedLength()
166 template <
typename TFields,
typename TVersionType>
167 static bool setVersionForMembers(TFields& fields, TVersionType
version)
172 template <
typename... TFields>
173 using IsAnyFieldVersionDependentBoolType =
176 comms::field::details::FieldVersionDependentCheckHelper<>())
182 template <
typename... TFields>
183 using FieldSelectMaxLengthIntType =
184 std::integral_constant<
187 std::size_t(0), comms::field::details::FieldMaxLengthCalcHelper<>())
190 template <
typename... TFields>
191 using FieldSumMaxLengthIntType =
192 std::integral_constant<
195 std::size_t(0), comms::field::details::FieldMaxLengthSumCalcHelper<>())
198 template <std::size_t TFrom, std::size_t TUntil,
typename... TFields>
199 using FieldSumMaxLengthFromUntilIntType =
200 std::integral_constant<
203 std::size_t(0), comms::field::details::FieldMaxLengthSumCalcHelper<>())
206 template <
typename... TFields>
207 using FieldSumMinLengthIntType =
208 std::integral_constant<
211 std::size_t(0), comms::field::details::FieldMinLengthSumCalcHelper<>())
214 template <std::size_t TFrom, std::size_t TUntil,
typename... TFields>
215 using FieldSumMinLengthFromUntilIntType =
216 std::integral_constant<
219 std::size_t(0), comms::field::details::FieldMinLengthSumCalcHelper<>())
222 template <
typename... TFields>
223 using FieldSumTotalBitLengthIntType =
224 std::integral_constant<
227 std::size_t(0), comms::field::details::FieldTotalBitLengthSumCalcHelper<>())
230 template <std::size_t TFrom, std::size_t TUntil,
typename... TFields>
231 using FieldSumTotalBitLengthFromUntilIntType =
232 std::integral_constant<
235 std::size_t(0), comms::field::details::FieldTotalBitLengthSumCalcHelper<>())
238 template <
typename... TFields>
239 using AnyFieldHasNonDefaultRefreshBoolType =
242 comms::field::details::FieldNonDefaultRefreshCheckHelper<>())
248 template <
typename... TFields>
249 using AllFieldsHaveReadNoStatusBoolType =
252 true, comms::field::details::FieldReadNoStatusDetectHelper<>())
258 template <
typename... TFields>
259 using AllFieldsHaveWriteNoStatusBoolType =
262 true, comms::field::details::FieldWriteNoStatusDetectHelper<>())
270 template <
typename TVersionType>
271 static comms::field::details::FieldVersionUpdateHelper<TVersionType> makeVersionUpdater(TVersionType
version)
273 return comms::field::details::FieldVersionUpdateHelper<TVersionType>(
version);
This file contain definition of error statuses used by comms module.
Contains various tuple type manipulation classes and functions.
constexpr TValue tupleTypeAccumulate(const TValue &value, TFunc &&func)
Performs "accumulate" algorithm on every type of the tuple.
Definition Tuple.h:686
constexpr TValue tupleTypeAccumulateFromUntil(const TValue &value, TFunc &&func)
Performs "accumulate" algorithm on specified types inside the tuple.
Definition Tuple.h:714
constexpr bool tupleTypeIsAnyOf(TFunc &&func)
Compile time check of whether any type within a tuple has a certain condition.
Definition Tuple.h:989
constexpr TValue tupleAccumulate(TTuple &&tuple, const TValue &value, TFunc &&func)
Performs "accumulate" algorithm on every element of the tuple.
Definition Tuple.h:587
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.
@ InvalidMsgData
Used to indicate that a message has invalid data.
constexpr unsigned version()
Version of the COMMS library as single numeric value.
Definition version.h:66
Replacement to std::conditional.
Definition type_traits.h:32