28struct AccumulateFromUntil;
40 template<
typename...>
class TAlg,
41 template<
typename...>
class TTransformOp,
42 template<
typename...>
class TBinaryOp,
46 using Type =
typename TAlg<>::template Type<TTransformOp, TBinaryOp, TStart, TRest...>;
50struct AccumulateLoop<true>
53 template<
typename...>
class TAlg,
54 template<
typename...>
class TTransformOp,
55 template<
typename...>
class TBinaryOp,
63struct AccumulateFromUntilLoop
68 template<
typename...>
class TAlg,
69 template<
typename...>
class TTransformOp,
70 template<
typename...>
class TBinaryOp,
74 using Type =
typename TAlg<>::template Type<TFrom, TUntil, TTransformOp, TBinaryOp, TStart, TRest...>;
78struct AccumulateFromUntilLoop<true>
83 template<
typename...>
class TAlg,
84 template<
typename...>
class TTransformOp,
85 template<
typename...>
class TBinaryOp,
96 template<
typename...>
class TTransformOp,
97 template<
typename...>
class TBinaryOp,
102 typename AccumulateLoop<0U ==
sizeof...(TRest)>::template Type<
103 comms::util::Accumulate,
106 typename TBinaryOp<>::template Type<
108 typename TTransformOp<>::template Type<T>
114struct AccumulateImpl<true>
117 template<
typename...>
class TTransformOp,
118 template<
typename...>
class TBinaryOp,
124template <
bool TEmpty>
125struct AccumulateFromUntilImpl
130 template<
typename...>
class TTransformOp,
131 template<
typename...>
class TBinaryOp,
136 typename Conditional<
139 typename AccumulateFromUntilImpl<
140 0U ==
sizeof...(TRest)
149 typename AccumulateFromUntilLoop<
150 (0U ==
sizeof...(TRest)) || (TUntil <= 1)
154 comms::util::AccumulateFromUntil,
157 typename TBinaryOp<>::template Type<
159 typename TTransformOp<>::template Type<T>
166struct AccumulateFromUntilImpl<true>
171 template<
typename...>
class TTransformOp,
172 template<
typename...>
class TBinaryOp,
178template <
bool THasFixedBitLength>
179struct FieldBitLengthIntTypeImpl
181 template <
typename T>
183 std::integral_constant<std::size_t, T::ParsedOptions::FixedBitLength>;
187struct FieldBitLengthIntTypeImpl<false>
190 template <
typename T>
192 std::integral_constant<
194 T::maxLength() * std::numeric_limits<std::uint8_t>::digits>;
Main namespace for all classes / functions of COMMS library.