34#error THIS HEADER IS A GENERATOR. DO NOT INCLUDE.
63#ifndef ETL_MESSAGE_ROUTER_INCLUDED
64#define ETL_MESSAGE_ROUTER_INCLUDED
69#include "message_packet.h"
70#include "message_types.h"
127 virtual bool is_null_router()
const = 0;
128 virtual bool is_producer()
const = 0;
129 virtual bool is_consumer()
const = 0;
132 virtual void receive(etl::message_router_id_t destination_router_id,
const etl::imessage&
message)
134 if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
149 if ((destination_router_id == get_message_router_id()) || (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS))
158 return accepts(
msg.get_message_id());
162 etl::message_router_id_t get_message_router_id()
const
164 return message_router_id;
169 NULL_MESSAGE_ROUTER = 255,
171 ALL_MESSAGE_ROUTERS = 253,
172 MESSAGE_BROKER = 252,
173 MESSAGE_ROUTER = 251,
174 MAX_MESSAGE_ROUTER = 249
180 : message_router_id(
id_)
186 , message_router_id(
id_)
196 etl::message_router_id_t message_router_id;
219 using etl::imessage_router::receive;
230 using etl::imessage_router::accepts;
245 ETL_DEPRECATED
bool is_null_router()
const ETL_OVERRIDE
251 bool is_producer()
const ETL_OVERRIDE
257 bool is_consumer()
const ETL_OVERRIDE
274 return etl::null_message_router::instance();
311 using etl::imessage_router::receive;
322 using etl::imessage_router::accepts;
337 ETL_DEPRECATED
bool is_null_router()
const ETL_OVERRIDE
343 bool is_producer()
const ETL_OVERRIDE
349 bool is_consumer()
const ETL_OVERRIDE
358 template <
typename T>
366 template <
typename TRouter,
typename TMessage>
378 template <
typename TRouter>
390 template <
typename TRouter,
typename TMessage>
394 etl::message_router_id_t
id,
403 template <
typename TRouter>
406 send_message(TRouter& destination,
410 destination.receive(
id, message);
416#if ETL_USING_CPP17 && !defined(ETL_MESSAGE_ROUTER_FORCE_CPP03_IMPLEMENTATION)
420 template <
typename TDerived,
typename... TMessageTypes>
421 class message_router :
public imessage_router
429 : imessage_router(
etl::imessage_router::MESSAGE_ROUTER)
435 : imessage_router(
etl::imessage_router::MESSAGE_ROUTER, successor_)
441 : imessage_router(id_)
448 : imessage_router(id_, successor_)
454 using etl::imessage_router::receive;
458 const bool was_handled = (receive_message_type<TMessageTypes>(msg) || ...);
468 static_cast<TDerived*
>(
this)->on_receive_unknown(msg);
473 template <typename TMessage, typename etl::enable_if<etl::is_base_of<imessage, TMessage>::value,
int>::type = 0>
474 void receive(
const TMessage& msg)
478 static_cast<TDerived*
>(
this)->on_receive(msg);
488 static_cast<TDerived*
>(
this)->on_receive_unknown(msg);
494 using imessage_router::accepts;
498 return (accepts_type<TMessageTypes>(
id) || ...);
502 ETL_DEPRECATED
bool is_null_router() const ETL_OVERRIDE
508 bool is_producer() const ETL_OVERRIDE
514 bool is_consumer() const ETL_OVERRIDE
522 template <
typename TMessage>
525 if (TMessage::ID == msg.get_message_id())
527 static_cast<TDerived*
>(
this)->on_receive(
static_cast<const TMessage&
>(msg));
537 template <
typename TMessage>
540 if (TMessage::ID ==
id)
This is the base of all message routers.
Definition message_router_generator.h:121
Definition message_packet.h:393
This router can be used as a producer-only of messages, such an interrupt routine.
Definition message_router_generator.h:281
Base exception class for message router.
Definition message_router_generator.h:88
Router id is out of the legal range.
Definition message_router_generator.h:101
This router can be used as a sink for messages or a 'null source' router.
Definition message_router_generator.h:203
Definition shared_message.h:49
Adds successor traits to a class.
Definition successor.h:73
bool has_successor() const
Does this have a successor?
Definition successor.h:184
successor_type & get_successor() const
Definition successor.h:174
successor()
Default constructor.
Definition successor.h:81
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
Definition exception.h:47
bitset_ext
Definition absolute.h:38
etl::imessage_router & get_null_message_router()
null message router functionality.
Definition message_router_generator.h:272
uint_least8_t message_id_t
Allow alternative type for message id.
Definition message_types.h:40
Definition type_traits_generator.h:844
Is T ultimately derived from etl::imessage_router?
Definition message_router_generator.h:360
Is T ultimately derived from etl::imessage?
Definition message.h:208
pair holds two objects of arbitrary type
Definition utility.h:164