29template <
typename TMessage>
30using MessageStaticNumIdBoolType =
31 typename comms::util::LazyDeepConditional<
32 comms::isMessageBase<TMessage>()
34 comms::util::MessageCheckHasStaticId,
35 comms::util::FalseType,
40struct MessageStaticNumIdCheckHelper
42 template <
typename TMessage>
43 constexpr bool operator()(
bool value)
const
45 return value && MessageStaticNumIdBoolType<TMessage>::value;
49template <
typename... TMessages>
50using AllMessagesHaveStaticNumIdBoolType =
51 std::integral_constant<
56template <
typename TAllMessages>
57struct AllMessagesHaveStaticNumIdCheckHelper;
59template <
typename... TMessages>
60struct AllMessagesHaveStaticNumIdCheckHelper<
std::tuple<TMessages...> >
62 static constexpr bool Value = AllMessagesHaveStaticNumIdBoolType<TMessages...>::value;
65template <
typename TAllMessages>
66constexpr bool allMessagesHaveStaticNumId()
68 return AllMessagesHaveStaticNumIdCheckHelper<TAllMessages>::Value;
71template <
typename TMessage>
72constexpr bool messageHasStaticNumId()
74 return MessageStaticNumIdBoolType<TMessage>::value;
77template <
bool TAllSorted,
bool TMoreThanOne,
typename...>
78class AllMessagesStrongSortedCheckHelper;
80template <
bool TMoreThanOne,
typename... TParams>
81class AllMessagesStrongSortedCheckHelper<false, TMoreThanOne, TParams...>
84 template <
typename...>
85 using Type = std::false_type;
88template <
typename... TParams>
89class AllMessagesStrongSortedCheckHelper<true, false, TParams...>
92 template <
typename...>
93 using Type = std::true_type;
96template <
typename... TParams>
97class AllMessagesStrongSortedCheckHelper<true, true, TParams...>
100 template <
typename TMsg1,
typename TMsg2,
typename... TRest>
103 (TMsg1::staticMsgId() < TMsg2::staticMsgId())
105 typename AllMessagesStrongSortedCheckHelper<
true, (0U <
sizeof...(TRest))>::template Type<TMsg2, TRest...>,
110template <
bool TAllSorted,
bool TMoreThanOne,
typename...>
111class AllMessagesWeakSortedCheckHelper;
113template <
bool TMoreThanOne,
typename... TParams >
114class AllMessagesWeakSortedCheckHelper<false, TMoreThanOne, TParams...>
117 template <
typename... TRest>
118 using Type = std::false_type;
121template <
typename... TParams>
122class AllMessagesWeakSortedCheckHelper<true, false, TParams...>
125 template <
typename... TRest>
126 using Type = std::true_type;
129template <
typename... TParams>
130class AllMessagesWeakSortedCheckHelper<true, true, TParams...>
133 template <
typename TMsg1,
typename TMsg2,
typename... TRest>
136 (TMsg1::staticMsgId() <= TMsg2::staticMsgId())
138 typename AllMessagesWeakSortedCheckHelper<
true, (0U <
sizeof...(TRest))>::template Type<TMsg2, TRest...>,
143template <
typename TAllMessages>
144struct AllMessagesStrongSortedCheckHelperWrap;
146template <
typename... TAllMessages>
147struct AllMessagesStrongSortedCheckHelperWrap<
std::tuple<TAllMessages...> >
149 static constexpr bool Value =
150 AllMessagesStrongSortedCheckHelper<
151 (AllMessagesHaveStaticNumIdBoolType<TAllMessages...>::value),
152 (1U <
sizeof...(TAllMessages))
153 >::template Type<TAllMessages...>::value;
156template <
typename TAllMessages>
157struct AllMessagesWeakSortedCheckHelperWrap;
159template <
typename... TAllMessages>
160struct AllMessagesWeakSortedCheckHelperWrap<
std::tuple<TAllMessages...> >
162 static constexpr bool Value =
163 AllMessagesWeakSortedCheckHelper<
164 (AllMessagesHaveStaticNumIdBoolType<TAllMessages...>::value),
165 (1U <
sizeof...(TAllMessages))
166 >::template Type<TAllMessages...>::value;
169template <
typename TAllMessages>
170constexpr bool allMessagesAreStrongSorted()
172 return AllMessagesStrongSortedCheckHelperWrap<TAllMessages>::Value;
175template <
typename TAllMessages>
176constexpr bool allMessagesAreWeakSorted()
178 return AllMessagesWeakSortedCheckHelperWrap<TAllMessages>::Value;
This file contains classes required for generic custom assertion functionality.
Provides common base class for the custom messages with default implementation.
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
Main namespace for all classes / functions of COMMS library.
Replacement to std::conditional.
Definition type_traits.h:32
Replacement to some types from standard type_traits.