From 7a061a43cdafee73e2a73c7d446d2129f0853703 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Fri, 23 Jul 2021 12:50:17 +0100 Subject: [PATCH] Altered 'unhandled' delegate to tbe the last in the array for the constexpr vspecialisation. --- include/etl/delegate_service.h | 31 +----- test/test_delegate_service.cpp | 110 ++++++++++---------- test/test_delegate_service_compile_time.cpp | 53 ++++++---- 3 files changed, 91 insertions(+), 103 deletions(-) diff --git a/include/etl/delegate_service.h b/include/etl/delegate_service.h index fd653349..d6152dfb 100644 --- a/include/etl/delegate_service.h +++ b/include/etl/delegate_service.h @@ -56,15 +56,6 @@ namespace etl { public: - //************************************************************************* - /// Registers an alternative delegate for unhandled ids. - /// \param delegate A reference to the user supplied 'unhandled' delegate. - //************************************************************************* - void register_unhandled_delegate(etl::delegate callback) - { - unhandled_delegate = callback; - } - //************************************************************************* /// Executes the delegate function for the index. /// Compile time assert if the id is out of range. @@ -91,29 +82,9 @@ namespace etl } else { - if (unhandled_delegate.is_valid()) - { - unhandled_delegate(id); - } + Delegates[Range](id); } } - - private: - - //************************************************************************* - /// The default callback function. - /// Calls the user defined 'unhandled' callback if it exists. - //************************************************************************* - void unhandled(size_t id) const - { - if (unhandled_delegate.is_valid()) - { - unhandled_delegate(id); - } - } - - /// The default delegate for unhandled ids. - etl::delegate unhandled_delegate; }; //*************************************************************************** diff --git a/test/test_delegate_service.cpp b/test/test_delegate_service.cpp index 385e769d..f6613370 100644 --- a/test/test_delegate_service.cpp +++ b/test/test_delegate_service.cpp @@ -33,10 +33,10 @@ SOFTWARE. namespace { - const size_t SIZE = 3U; - const size_t OFFSET = 5U; + const size_t Size = 3U; + const size_t Offset = 5U; - using Service = etl::delegate_service; + using Service = etl::delegate_service; //***************************************************************************** bool global_called = false; @@ -122,10 +122,10 @@ namespace { enum { - GLOBAL = OFFSET, - MEMBER1, - MEMBER2, - OUT_OF_RANGE + Global = Offset, + Member1, + Member2, + Out_Of_Range }; SUITE(test_delegate_service) @@ -135,13 +135,13 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(test.callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(test.callback); + service.register_delegate(member_callback); - service.call(); + service.call(); - CHECK_EQUAL(GLOBAL, called_id); + CHECK_EQUAL(Global, called_id); CHECK(global_called); CHECK(!member1_called); CHECK(!member2_called); @@ -153,13 +153,13 @@ namespace { Service service; - service.register_delegate(GLOBAL, global_callback); - service.register_delegate(MEMBER1, test.callback); - service.register_delegate(MEMBER2, member_callback); + service.register_delegate(Global, global_callback); + service.register_delegate(Member1, test.callback); + service.register_delegate(Member2, member_callback); - service.call(GLOBAL); + service.call(Global); - CHECK_EQUAL(GLOBAL, called_id); + CHECK_EQUAL(Global, called_id); CHECK(global_called); CHECK(!member1_called); CHECK(!member2_called); @@ -171,13 +171,13 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(test.callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(test.callback); + service.register_delegate(member_callback); - service.call(); + service.call(); - CHECK_EQUAL(MEMBER1, called_id); + CHECK_EQUAL(Member1, called_id); CHECK(!global_called); CHECK(member1_called); CHECK(!member2_called); @@ -189,13 +189,13 @@ namespace { Service service; - service.register_delegate(GLOBAL, global_callback); - service.register_delegate(MEMBER1, test.callback); - service.register_delegate(MEMBER2, member_callback); + service.register_delegate(Global, global_callback); + service.register_delegate(Member1, test.callback); + service.register_delegate(Member2, member_callback); - service.call(MEMBER1); + service.call(Member1); - CHECK_EQUAL(MEMBER1, called_id); + CHECK_EQUAL(Member1, called_id); CHECK(!global_called); CHECK(member1_called); CHECK(!member2_called); @@ -207,13 +207,13 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(test.callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(test.callback); + service.register_delegate(member_callback); - service.call(); + service.call(); - CHECK_EQUAL(MEMBER2, called_id); + CHECK_EQUAL(Member2, called_id); CHECK(!global_called); CHECK(!member1_called); CHECK(member2_called); @@ -225,11 +225,11 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(test.callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(test.callback); + service.register_delegate(member_callback); - service.call(OUT_OF_RANGE); + service.call(Out_Of_Range); CHECK_EQUAL(UINT_MAX, called_id); CHECK(!global_called); @@ -243,15 +243,15 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(test.callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(test.callback); + service.register_delegate(member_callback); service.register_unhandled_delegate(unhandled_callback); - service.call(OUT_OF_RANGE); + service.call(Out_Of_Range); - CHECK_EQUAL(OUT_OF_RANGE, called_id); + CHECK_EQUAL(Out_Of_Range, called_id); CHECK(!global_called); CHECK(!member1_called); CHECK(!member2_called); @@ -263,10 +263,10 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(member_callback); - service.call(); + service.call(); CHECK_EQUAL(UINT_MAX, called_id); CHECK(!global_called); @@ -280,10 +280,10 @@ namespace { Service service; - service.register_delegate(GLOBAL, global_callback); - service.register_delegate(MEMBER2, member_callback); + service.register_delegate(Global, global_callback); + service.register_delegate(Member2, member_callback); - service.call(MEMBER1); + service.call(Member1); CHECK_EQUAL(UINT_MAX, called_id); CHECK(!global_called); @@ -297,14 +297,14 @@ namespace { Service service; - service.register_delegate(global_callback); - service.register_delegate(member_callback); + service.register_delegate(global_callback); + service.register_delegate(member_callback); service.register_unhandled_delegate(unhandled_callback); - service.call(); + service.call(); - CHECK_EQUAL(MEMBER1, called_id); + CHECK_EQUAL(Member1, called_id); CHECK(!global_called); CHECK(!member1_called); CHECK(!member2_called); @@ -316,14 +316,14 @@ namespace { Service service; - service.register_delegate(GLOBAL, global_callback); - service.register_delegate(MEMBER2, member_callback); + service.register_delegate(Global, global_callback); + service.register_delegate(Member2, member_callback); service.register_unhandled_delegate(unhandled_callback); - service.call(MEMBER1); + service.call(Member1); - CHECK_EQUAL(MEMBER1, called_id); + CHECK_EQUAL(Member1, called_id); CHECK(!global_called); CHECK(!member1_called); CHECK(!member2_called); diff --git a/test/test_delegate_service_compile_time.cpp b/test/test_delegate_service_compile_time.cpp index 4fe696cb..14b5faf8 100644 --- a/test/test_delegate_service_compile_time.cpp +++ b/test/test_delegate_service_compile_time.cpp @@ -33,10 +33,10 @@ SOFTWARE. namespace { - const size_t SIZE = 3U; - const size_t OFFSET = 5U; + const size_t Size = 2U; + const size_t Offset = 5U; - using Service = etl::delegate_service; + using Service = etl::delegate_service; //***************************************************************************** bool global_called = false; @@ -82,7 +82,7 @@ namespace Test test; - // Callback for 'member2'. + // Callback for 'member'. constexpr etl::delegate member_callback = etl::delegate::create(); // Callback for 'global'. @@ -91,6 +91,13 @@ namespace // Callback for 'unhandled'. constexpr etl::delegate unhandled_callback = etl::delegate::create(); + constexpr etl::delegate delegate_list[] + { + global_callback, + member_callback, + unhandled_callback + }; + //***************************************************************************** // Initialises the test results. //***************************************************************************** @@ -110,9 +117,9 @@ namespace { enum { - GLOBAL = OFFSET, - MEMBER, - OUT_OF_RANGE + Global = Offset, + Member, + Out_Of_Range }; SUITE(test_delegate_service) @@ -120,25 +127,35 @@ namespace //************************************************************************* TEST_FIXTURE(SetupFixture, test_delegate_compile_time_constexpr) { - static constexpr etl::delegate delegate_list[] - { - global_callback, - member_callback - }; + etl::delegate_service service; - etl::delegate_service service; - - service.call(); - CHECK_EQUAL(GLOBAL, called_id); + service.call(); + CHECK_EQUAL(Global, called_id); CHECK(global_called); CHECK(!member_called); + CHECK(!unhandled_called); + called_id = UINT_MAX; global_called = false; + member_called = false; + unhandled_called = false; - service.call(); - CHECK_EQUAL(MEMBER, called_id); + service.call(); + CHECK_EQUAL(Member, called_id); CHECK(!global_called); CHECK(member_called); + CHECK(!unhandled_called); + + called_id = UINT_MAX; + global_called = false; + member_called = false; + unhandled_called = false; + + service.call(Out_Of_Range); + CHECK_EQUAL(Out_Of_Range, called_id); + CHECK(!global_called); + CHECK(!member_called); + CHECK(unhandled_called); } }; }