29#ifndef ETL_MESSAGE_INCLUDED
30#define ETL_MESSAGE_INCLUDED
35#include "message_types.h"
36#include "static_assert.h"
46 message_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
47 :
exception(reason_, file_name_, line_number_)
57 unhandled_message_exception(string_type file_name_, numeric_type line_number_)
58 : message_exception(ETL_ERROR_TEXT(
"message:unknown", ETL_MESSAGE_FILE_ID
"A"), file_name_, line_number_)
67#if ETL_HAS_VIRTUAL_MESSAGES
88 template <etl::message_
id_t ID_,
typename TBase = etl::imessage>
95 ETL_STATIC_ASSERT((etl::is_base_of<etl::imessage, TBase>::value),
"TBase is not derived from etl::imessage");
97 typedef TBase base_type;
136 imessage(
const imessage& other) ETL_NOEXCEPT
142 imessage& operator=(
const imessage& rhs) ETL_NOEXCEPT
153 imessage() ETL_DELETE;
160 template <etl::
message_id_t ID_, typename TBase = etl::imessage>
163 , public etl::message_tag
167 ETL_STATIC_ASSERT((etl::is_base_of<etl::imessage, TBase>::value),
"TBase is not derived from etl::imessage");
169 typedef TBase base_type;
172 message() ETL_NOEXCEPT
178 message(
const message&) ETL_NOEXCEPT
184 message& operator=(
const message&) ETL_NOEXCEPT
197 template <etl::message_
id_t ID_,
typename TBase>
203 template <
typename T>
211 template <
typename T>
219 template <
typename T>
227 template <
typename T>
235 template <
typename T>
244 template <
typename T>
245 inline constexpr bool is_imessage_v = is_imessage<T>::value;
250 template <
typename T>
251 inline constexpr bool is_message_v = is_message<T>::value;
256 template <
typename T>
257 inline constexpr bool is_message_type_v = is_message_type<T>::value;
262 template <
typename T>
263 inline constexpr bool is_message_base_v = is_message_base<T>::value;
268 template <
typename T>
269 inline constexpr bool is_user_message_base_v = is_user_message_base<T>::value;
275 template <
typename T>
280 ETL_STATIC_ASSERT(etl::is_message<T>::value,
"T is not an ETL message");
288 template <
typename U>
289 static yes test(
char (*)[
sizeof(&U::ID)]);
296 static const bool value =
sizeof(test<typename etl::remove_cv<T>::type>(0)) ==
sizeof(yes);
299 template <
typename T>
300 const bool has_message_id<T>::value;
303 template <
typename T>
304 inline constexpr bool has_message_id_v = has_message_id<T>::value;
308 namespace private_message
310 template <
typename TMsg1,
typename TMsg2,
bool HasIDs>
311 struct compare_message_id_less_impl;
319 template <
typename TMsg1,
typename TMsg2>
320 struct compare_message_id_less_impl<TMsg1, TMsg2, false>
322 ETL_STATIC_ASSERT(etl::has_message_id<TMsg1>::value,
"TMsg1 does not have an ID");
323 ETL_STATIC_ASSERT(etl::has_message_id<TMsg2>::value,
"TMsg2 does not have an ID");
324 ETL_STATIC_ASSERT(etl::is_message_type<TMsg1>::value,
"TMsg1 is not derived from etl::message<>");
325 ETL_STATIC_ASSERT(etl::is_message_type<TMsg2>::value,
"TMsg2 is not derived from etl::message<>");
335 template <
typename TMsg1,
typename TMsg2>
336 struct compare_message_id_less_impl<TMsg1, TMsg2, true> :
etl::bool_constant < TMsg1::ID< TMsg2::ID>
338 ETL_STATIC_ASSERT(etl::is_message_type<TMsg1>::value, "TMsg1 is not derived from etl::message<>");
339 ETL_STATIC_ASSERT(etl::is_message_type<TMsg2>::value, "TMsg2 is not derived from etl::message<>");
349 template <typename TMsg1, typename TMsg2>
350 struct compare_message_id_less
351 : public private_message::compare_message_id_less_impl< TMsg1, TMsg2, has_message_id<TMsg1>::value && has_message_id<TMsg2>::value>
361 template <typename TMsg1, typename TMsg2>
362 struct compare_message_id_less : etl::bool_constant < TMsg1::ID< TMsg2::ID>
364 ETL_STATIC_ASSERT(etl::is_message_type<TMsg1>::value, "TMsg1 is not derived from etl::message<>");
365 ETL_STATIC_ASSERT(etl::is_message_type<TMsg2>::value, "TMsg2 is not derived from etl::message<>");
370 template <typename TMsg1, typename TMsg2>
371 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:107
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
Definition exception.h:59
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:277
Is T an etl::imessage?
Definition message.h:205
Is T a base of etl::message<T>.
Definition message.h:229
Is T an etl::message<> or derived from etl::message<>.
Definition message.h:221
Is T ultimately derived from etl::imessage?
Definition message.h:213
Is T a user defined base of etl::message<T> and not an etl::imessage.
Definition message.h:237