13 #include <type_traits>
22 template <
typename...>
23 struct EmptyStruct {};
29 template <
typename TTrue,
typename TFalse>
36 template <
typename TTrue,
typename TFalse>
41 template <
bool TCond,
typename TTrue,
typename TFalse>
45 struct LazyShallowConditional
47 template <
template<
typename...>
class TTrue,
template<
typename...>
class TFalse,
typename... TParams>
48 using Type = TTrue<TParams...>;
52 struct LazyShallowConditional<false>
54 template <
template<
typename...>
class TTrue,
template<
typename...>
class TFalse,
typename... TParams>
55 using Type = TFalse<TParams...>;
59 struct LazyDeepConditional
61 template <
template<
typename...>
class TTrue,
template<
typename...>
class TFalse,
typename... TParams>
62 using Type =
typename TTrue<>::template Type<TParams...>;
66 struct LazyDeepConditional<false>
68 template <
template<
typename...>
class TTrue,
template<
typename...>
class TFalse,
typename... TParams>
69 using Type =
typename TFalse<>::template Type<TParams...>;
73 struct LazyShallowDeepConditional
75 template <
template<
typename...>
class TTrue,
template<
typename...>
class TFalse,
typename... TParams>
76 using Type = TTrue<TParams...>;
80 struct LazyShallowDeepConditional<false>
82 template <
template<
typename...>
class TTrue,
template<
typename...>
class TFalse,
typename... TParams>
83 using Type =
typename TFalse<>::template Type<TParams...>;
86 template <
typename...>
90 template <
typename T,
typename...>
94 template <
typename...>
95 class FieldCheckVersionDependent
99 using Type = std::integral_constant<bool, T::isVersionDependent()>;
102 template <
typename...>
103 class FieldCheckNonDefaultRefresh
106 template <
typename T>
107 using Type = std::integral_constant<bool, T::hasNonDefaultRefresh()>;
110 template <
typename...>
111 class FieldCheckVarLength
114 template <
typename T>
115 using Type = std::integral_constant<bool, T::minLength() != T::maxLength()>;
118 template <
typename...>
119 class FieldCheckReadNoStatus
122 template <
typename T>
123 using Type = std::integral_constant<bool, T::hasReadNoStatus()>;
126 template <
typename...>
127 class FieldCheckWriteNoStatus
130 template <
typename T>
131 using Type = std::integral_constant<bool, T::hasWriteNoStatus()>;
134 template <
typename...>
138 template <
typename...>
139 using Type = std::true_type;
143 template <
typename...>
147 template <
typename...>
148 using Type = std::false_type;
151 template <
typename...>
155 template <
typename T,
typename...>
159 template <
typename...>
160 struct LogicalOrBinaryOp
163 template <
typename TFirst,
typename TSecond>
164 using Type = std::integral_constant<bool, (TFirst::value || TSecond::value)>;
167 template <
typename...>
168 struct LogicalAndBinaryOp
171 template <
typename TFirst,
typename TSecond>
172 using Type = std::integral_constant<bool, (TFirst::value && TSecond::value)>;
175 template <
typename...>
176 struct IntMaxBinaryOp
178 template <
typename TFirst,
typename TSecond>
180 typename Conditional<
181 (TFirst::value >= TSecond::value)
188 template <
typename...>
189 struct IntMinBinaryOp
191 template <
typename TFirst,
typename TSecond>
193 typename Conditional<
194 (TFirst::value <= TSecond::value)
201 template <
typename...>
202 struct IntSumBinaryOp
204 template <
typename TFirst,
typename TSecond>
206 std::integral_constant<typename TFirst::value_type, TFirst::value + TSecond::value>;
209 template <
typename...>
210 class FieldMinLengthIntType
213 template <
typename T>
214 using Type = std::integral_constant<std::size_t, T::minLength()>;
217 template <
typename...>
218 class FieldMaxLengthIntType
221 template <
typename T>
222 using Type = std::integral_constant<std::size_t, T::maxLength()>;
225 template <
typename...>
226 class FieldBitLengthIntType
229 template <
typename T>
231 typename details::FieldBitLengthIntTypeImpl<
232 T::ParsedOptions::HasFixedBitLengthLimit
236 template <
typename...>
237 class AlignmentIntType
240 template <
typename T>
241 using Type = std::integral_constant<std::size_t,
alignof(T)>;
244 template <
typename...>
248 template <
typename T>
249 using Type = std::integral_constant<std::size_t,
sizeof(T)>;
252 template <
typename...>
253 class MessageCheckHasStaticId
256 template <
typename TMessage>
257 using Type = std::integral_constant<bool, TMessage::hasStaticMsgId()>;
260 template <
typename...>
261 struct AccumulateFromUntil
266 template<
typename...>
class TTransformOp,
267 template<
typename...>
class TBinaryOp,
271 typename details::AccumulateFromUntilImpl<
272 (0 ==
sizeof...(TRest)) || (TUntil == 0U)
282 template <
typename...>
286 template<
typename...>
class TTransformOp,
287 template<
typename...>
class TBinaryOp,
291 typename AccumulateFromUntil<>::template Type<
Replacement to some types from standard type_traits.
typename Conditional< TCond >::template Type< TTrue, TFalse > ConditionalT
Replacement to std::conditional.
Definition: type_traits.h:42
Main namespace for all classes / functions of COMMS library.
Replacement to std::conditional.
Definition: type_traits.h:28