diff --git a/include/etl/generators/message_router_generator.h b/include/etl/generators/message_router_generator.h index 868a51ab..71f05dea 100644 --- a/include/etl/generators/message_router_generator.h +++ b/include/etl/generators/message_router_generator.h @@ -76,7 +76,7 @@ cog.outl("//******************************************************************** #include "placement_new.h" #include "successor.h" #include "type_traits.h" - +#include "type_list.h" #include namespace etl @@ -574,8 +574,7 @@ namespace etl cog.outl("//***************************************************************************") cog.outl("template message_packet;" % int(Handlers)) + cog.outl("T%s> message_packet;" % int(Handlers)) cog.outl("") + + cog.outl("#if ETL_USING_CPP11") + cog.out(" using message_types = etl::type_list<") + for n in range(1, int(Handlers)): + cog.out("T%s, " % n) + cog.outl("T%s> message_packet;" % int(Handlers)) + cog.outl("#endif") + cog.outl("") + cog.outl(" //**********************************************") cog.outl(" message_router(etl::message_router_id_t id_)") cog.outl(" : imessage_router(id_)") @@ -765,6 +773,15 @@ namespace etl cog.out("T%s, " % t) cog.outl(" T%s> message_packet;" % n) cog.outl("") + + cog.outl("#if ETL_USING_CPP11") + cog.out(" using message_types = etl::type_list<") + for t in range(1, n): + cog.out("T%s, " % t) + cog.outl("T%s>;" % n) + cog.outl("#endif") + cog.outl("") + cog.outl(" //**********************************************") cog.outl(" message_router(etl::message_router_id_t id_)") cog.outl(" : imessage_router(id_)") diff --git a/include/etl/message_router.h b/include/etl/message_router.h index 564f5fa5..1feaa3c9 100644 --- a/include/etl/message_router.h +++ b/include/etl/message_router.h @@ -65,7 +65,6 @@ SOFTWARE. #include "successor.h" #include "type_traits.h" #include "type_list.h" - #include namespace etl @@ -411,8 +410,7 @@ namespace etl { public: - using message_packet = etl::message_packet; - using message_types = etl::type_list; + typedef etl::message_packet message_packet; //********************************************** message_router() @@ -550,108 +548,7 @@ namespace etl } } }; - - //*************************************************************************** - // The definition for 0 message types. - //*************************************************************************** - template - class message_router : public imessage_router - { - public: - - using message_packet = etl::message_packet<>; - using message_types = etl::type_list<>; - - //********************************************** - message_router() - : imessage_router(etl::imessage_router::MESSAGE_ROUTER) - { - } - - //********************************************** - message_router(etl::imessage_router& successor_) - : imessage_router(etl::imessage_router::MESSAGE_ROUTER, successor_) - { - } - - //********************************************** - message_router(etl::message_router_id_t id_) - : imessage_router(id_) - { - ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); - } - - //********************************************** - message_router(etl::message_router_id_t id_, etl::imessage_router& successor_) - : imessage_router(id_, successor_) - { - ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); - } - - //********************************************** - using etl::imessage_router::receive; - - void receive(const etl::imessage& msg) ETL_OVERRIDE - { - if (has_successor()) - { - get_successor().receive(msg); - } - } - - template ::value, int>::type = 0> - void receive(const TMessage& msg) - { -#include "etl/private/diagnostic_array_bounds_push.h" - if (has_successor()) - { - get_successor().receive(msg); - } -#include "etl/private/diagnostic_pop.h" - } - - //********************************************** - using imessage_router::accepts; - - bool accepts(etl::message_id_t /*id*/) const ETL_OVERRIDE - { - return false; - } - - //******************************************** - ETL_DEPRECATED bool is_null_router() const ETL_OVERRIDE - { - return false; - } - - //******************************************** - bool is_producer() const ETL_OVERRIDE - { - return true; - } - - //******************************************** - bool is_consumer() const ETL_OVERRIDE - { - return true; - } - }; - - //*************************************************************************** - /// Helper to turn etl::type_list into etl::tuple - template - struct message_router_from_type_list; - - template - struct message_router_from_type_list> - { - using type = etl::message_router; - }; - - template - using message_router_from_type_list_t = typename message_router_from_type_list::type; - - #else +#else //************************************************************************************************* // For C++14 and below. //************************************************************************************************* @@ -669,9 +566,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 - using message_types = etl::type_list; -#endif + #if ETL_USING_CPP11 + using message_types = etl::type_list message_packet; + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -824,9 +721,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -979,9 +876,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1133,9 +1030,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1285,9 +1182,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1436,9 +1333,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1586,9 +1483,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1735,9 +1632,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -1882,9 +1779,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2028,9 +1925,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2172,9 +2069,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2315,9 +2212,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2456,9 +2353,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2596,9 +2493,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2735,9 +2632,9 @@ namespace etl typedef etl::message_packet message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2871,11 +2768,11 @@ namespace etl { public: - typedef etl::message_packet message_packet; + typedef etl::message_packet< T1> message_packet; -#if ETL_USING_CPP11 + #if ETL_USING_CPP11 using message_types = etl::type_list; -#endif + #endif //********************************************** message_router(etl::message_router_id_t id_) @@ -2997,94 +2894,6 @@ namespace etl return true; } }; - - //*************************************************************************** - // Specialisation for 0 message types. - //*************************************************************************** - template - class message_router - : public imessage_router - { - public: - - typedef etl::message_packet<> message_packet; - -#if ETL_USING_CPP11 - using message_types = etl::type_list<>; -#endif - - //********************************************** - message_router(etl::message_router_id_t id_) - : imessage_router(id_) - { - ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); - } - - //********************************************** - message_router(etl::message_router_id_t id_, etl::imessage_router& successor_) - : imessage_router(id_, successor_) - { - ETL_ASSERT(id_ <= etl::imessage_router::MAX_MESSAGE_ROUTER, ETL_ERROR(etl::message_router_illegal_id)); - } - - //********************************************** - message_router() - : imessage_router(etl::imessage_router::MESSAGE_ROUTER) - { - } - - //********************************************** - message_router(etl::imessage_router& successor_) - : imessage_router(etl::imessage_router::MESSAGE_ROUTER, successor_) - { - } - - //********************************************** - using etl::imessage_router::receive; - - void receive(const etl::imessage& msg) ETL_OVERRIDE - { -#include "etl/private/diagnostic_array_bounds_push.h" - if (has_successor()) - { - get_successor().receive(msg); - } -#include "etl/private/diagnostic_pop.h" - } - - //********************************************** - using imessage_router::accepts; - - bool accepts(etl::message_id_t id) const ETL_OVERRIDE - { - if (has_successor()) - { - return get_successor().accepts(id); - } - else - { - return false; - } - } - - //******************************************** - ETL_DEPRECATED bool is_null_router() const ETL_OVERRIDE - { - return false; - } - - //******************************************** - bool is_producer() const ETL_OVERRIDE - { - return true; - } - - //******************************************** - bool is_consumer() const ETL_OVERRIDE - { - return true; - } - }; #endif }