mirror of
https://github.com/ETLCPP/etl.git
synced 2026-11-09 14:49:53 +08:00
Turned etl::send_message into templates so that direct calls to concrete routers are possible
This commit is contained in:
parent
b807bad3e3
commit
80613827c9
@ -342,11 +342,22 @@ namespace etl
|
||||
}
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
/// Is T ultimately derived from etl::imessage_router?
|
||||
//***************************************************************************
|
||||
template <typename T>
|
||||
struct is_message_router : public etl::bool_constant<etl::is_base_of<etl::imessage_router, typename etl::remove_cvref<T>::type>::value>
|
||||
{
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
/// Send a message to a router.
|
||||
//***************************************************************************
|
||||
static inline void send_message(etl::imessage_router& destination,
|
||||
const etl::imessage& message)
|
||||
template <typename TRouter, typename TMessage>
|
||||
static
|
||||
typename etl::enable_if<etl::is_message_router<TRouter>::value && etl::is_message<TMessage>::value, void>::type
|
||||
send_message(TRouter& destination,
|
||||
const TMessage& message)
|
||||
{
|
||||
destination.receive(message);
|
||||
}
|
||||
@ -354,8 +365,11 @@ namespace etl
|
||||
//***************************************************************************
|
||||
/// Send a shared message to a router.
|
||||
//***************************************************************************
|
||||
static inline void send_message(etl::imessage_router& destination,
|
||||
etl::shared_message message)
|
||||
template <typename TRouter>
|
||||
static
|
||||
typename etl::enable_if<etl::is_message_router<TRouter>::value, void>::type
|
||||
send_message(TRouter& destination,
|
||||
etl::shared_message message)
|
||||
{
|
||||
destination.receive(message);
|
||||
}
|
||||
@ -363,9 +377,12 @@ namespace etl
|
||||
//***************************************************************************
|
||||
/// Send a message to a router with a particular id.
|
||||
//***************************************************************************
|
||||
static inline void send_message(etl::imessage_router& destination,
|
||||
etl::message_router_id_t id,
|
||||
const etl::imessage& message)
|
||||
template <typename TRouter, typename TMessage>
|
||||
static
|
||||
typename etl::enable_if<etl::is_message_router<TRouter>::value && etl::is_message<TMessage>::value, void>::type
|
||||
send_message(TRouter& destination,
|
||||
etl::message_router_id_t id,
|
||||
const TMessage& message)
|
||||
{
|
||||
destination.receive(id, message);
|
||||
}
|
||||
@ -373,9 +390,12 @@ namespace etl
|
||||
//***************************************************************************
|
||||
/// Send a shared message to a router with a particular id.
|
||||
//***************************************************************************
|
||||
static inline void send_message(etl::imessage_router& destination,
|
||||
etl::message_router_id_t id,
|
||||
etl::shared_message message)
|
||||
template <typename TRouter>
|
||||
static
|
||||
typename etl::enable_if<etl::is_message_router<TRouter>::value, void>::type
|
||||
send_message(TRouter& destination,
|
||||
etl::message_router_id_t id,
|
||||
etl::shared_message message)
|
||||
{
|
||||
destination.receive(id, message);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user