29#ifndef ETL_MESSAGE_INCLUDED
30#define ETL_MESSAGE_INCLUDED
35#include "message_types.h"
36#include "static_assert.h"
48 message_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
49 :
exception(reason_, file_name_, line_number_)
59 unhandled_message_exception(string_type file_name_, numeric_type line_number_)
60 : message_exception(ETL_ERROR_TEXT(
"message:unknown", ETL_MESSAGE_FILE_ID
"A"), file_name_, line_number_)
69#if ETL_HAS_VIRTUAL_MESSAGES
90 template <etl::message_
id_t ID_,
typename TBase = etl::imessage>
97 ETL_STATIC_ASSERT((etl::is_base_of<etl::imessage, TBase>::value),
"TBase is not derived from etl::imessage");
99 typedef TBase base_type;
138 imessage(
const imessage& other) ETL_NOEXCEPT
144 imessage& operator=(
const imessage& rhs) ETL_NOEXCEPT
155 imessage() ETL_DELETE;
162 template <etl::
message_id_t ID_, typename TBase = etl::imessage>
165 , public etl::message_tag
169 ETL_STATIC_ASSERT((etl::is_base_of<etl::imessage, TBase>::value),
"TBase is not derived from etl::imessage");
171 typedef TBase base_type;
174 message() ETL_NOEXCEPT
180 message(
const message&) ETL_NOEXCEPT
186 message& operator=(
const message&) ETL_NOEXCEPT
199 template <etl::message_
id_t ID_,
typename TBase>
205 template <
typename T>
213 template <
typename T>
221 template <
typename T>
229 template <
typename T>
237 template <
typename T>
246 template <
typename T>
247 inline constexpr bool is_imessage_v = is_imessage<T>::value;
252 template <
typename T>
253 inline constexpr bool is_message_v = is_message<T>::value;
258 template <
typename T>
259 inline constexpr bool is_message_type_v = is_message_type<T>::value;
264 template <
typename T>
265 inline constexpr bool is_message_base_v = is_message_base<T>::value;
270 template <
typename T>
271 inline constexpr bool is_user_message_base_v = is_user_message_base<T>::value;
277 template <
typename T>
282 ETL_STATIC_ASSERT(etl::is_message<T>::value,
"T is not an ETL message");
290 template <
typename U>
291 static yes test(
char (*)[
sizeof(&U::ID)]);
298 static const bool value =
sizeof(test<typename etl::remove_cv<T>::type>(0)) ==
sizeof(yes);
301 template <
typename T>
302 const bool has_message_id<T>::value;
305 template <
typename T>
306 inline constexpr bool has_message_id_v = has_message_id<T>::value;
310 namespace private_message
312 template <
typename TMsg1,
typename TMsg2,
bool HasIDs>
313 struct compare_message_id_less_impl;
321 template <
typename TMsg1,
typename TMsg2>
322 struct compare_message_id_less_impl<TMsg1, TMsg2, false>
324 ETL_STATIC_ASSERT(etl::has_message_id<TMsg1>::value,
"TMsg1 does not have an ID");
325 ETL_STATIC_ASSERT(etl::has_message_id<TMsg2>::value,
"TMsg2 does not have an ID");
326 ETL_STATIC_ASSERT(etl::is_message_type<TMsg1>::value,
"TMsg1 is not derived from etl::message<>");
327 ETL_STATIC_ASSERT(etl::is_message_type<TMsg2>::value,
"TMsg2 is not derived from etl::message<>");
337 template <
typename TMsg1,
typename TMsg2>
338 struct compare_message_id_less_impl<TMsg1, TMsg2, true> :
etl::bool_constant < TMsg1::ID< TMsg2::ID>
340 ETL_STATIC_ASSERT(etl::is_message_type<TMsg1>::value, "TMsg1 is not derived from etl::message<>");
341 ETL_STATIC_ASSERT(etl::is_message_type<TMsg2>::value, "TMsg2 is not derived from etl::message<>");
351 template <typename TMsg1, typename TMsg2>
352 struct compare_message_id_less
353 : public private_message::compare_message_id_less_impl< TMsg1, TMsg2, has_message_id<TMsg1>::value && has_message_id<TMsg2>::value>
363 template <typename TMsg1, typename TMsg2>
364 struct compare_message_id_less : etl::bool_constant < TMsg1::ID< TMsg2::ID>
366 ETL_STATIC_ASSERT(etl::is_message_type<TMsg1>::value, "TMsg1 is not derived from etl::message<>");
367 ETL_STATIC_ASSERT(etl::is_message_type<TMsg2>::value, "TMsg2 is not derived from etl::message<>");
372 template <typename TMsg1, typename TMsg2>
373 inline constexpr bool compare_message_id_less_v = compare_message_id_less<TMsg1, TMsg2>::value;
static ETL_CONSTANT etl::message_id_t ID
The message's static ID.
Definition message.h:109
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
Definition exception.h:59
bitset_ext
Definition absolute.h:40
uint_least8_t message_id_t
Allow alternative type for message id.
Definition message_types.h:40
Definition type_traits.h:97
Detects presence of a static ID member.
Definition message.h:279
Is T an etl::imessage?
Definition message.h:207
Is T a base of etl::message<T>.
Definition message.h:231
Is T an etl::message<> or derived from etl::message<>.
Definition message.h:223
Is T ultimately derived from etl::imessage?
Definition message.h:215
Is T a user defined base of etl::message<T> and not an etl::imessage.
Definition message.h:239