From 80613827c980eb8ab5b0f285b2611fb36d1ce6af Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Fri, 15 Mar 2024 10:58:11 +0000 Subject: [PATCH] Turned etl::send_message into templates so that direct calls to concrete routers are possible --- include/etl/message_router.h | 40 +++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/include/etl/message_router.h b/include/etl/message_router.h index c2712b16..63c726b2 100644 --- a/include/etl/message_router.h +++ b/include/etl/message_router.h @@ -342,11 +342,22 @@ namespace etl } }; + //*************************************************************************** + /// Is T ultimately derived from etl::imessage_router? + //*************************************************************************** + template + struct is_message_router : public etl::bool_constant::type>::value> + { + }; + //*************************************************************************** /// Send a message to a router. //*************************************************************************** - static inline void send_message(etl::imessage_router& destination, - const etl::imessage& message) + template + static + typename etl::enable_if::value && etl::is_message::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 + static + typename etl::enable_if::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 + static + typename etl::enable_if::value && etl::is_message::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 + static + typename etl::enable_if::value, void>::type + send_message(TRouter& destination, + etl::message_router_id_t id, + etl::shared_message message) { destination.receive(id, message); }