mirror of
https://github.com/ETLCPP/etl.git
synced 2026-10-28 18:07:10 +08:00
Altered 'unhandled' delegate to tbe the last in the array for the constexpr vspecialisation.
This commit is contained in:
parent
d49c2d28e0
commit
7a061a43cd
@ -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<void(size_t)> 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<void(size_t)> unhandled_delegate;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
|
||||
@ -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<SIZE, OFFSET>;
|
||||
using Service = etl::delegate_service<Size, Offset>;
|
||||
|
||||
//*****************************************************************************
|
||||
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>(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);
|
||||
@ -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>(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);
|
||||
@ -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>(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<MEMBER2>();
|
||||
service.call<Member2>();
|
||||
|
||||
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>(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(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>(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.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>(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);
|
||||
@ -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>(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);
|
||||
@ -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);
|
||||
|
||||
@ -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<SIZE, OFFSET>;
|
||||
using Service = etl::delegate_service<Size, Offset>;
|
||||
|
||||
//*****************************************************************************
|
||||
bool global_called = false;
|
||||
@ -82,7 +82,7 @@ namespace
|
||||
|
||||
Test test;
|
||||
|
||||
// Callback for 'member2'.
|
||||
// Callback for 'member'.
|
||||
constexpr etl::delegate<void(size_t)> member_callback = etl::delegate<void(size_t)>::create<Test, test, &Test::member>();
|
||||
|
||||
// Callback for 'global'.
|
||||
@ -91,6 +91,13 @@ namespace
|
||||
// Callback for 'unhandled'.
|
||||
constexpr etl::delegate<void(size_t)> unhandled_callback = etl::delegate<void(size_t)>::create<unhandled>();
|
||||
|
||||
constexpr etl::delegate<void(size_t)> 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<void(size_t)> delegate_list[]
|
||||
{
|
||||
global_callback,
|
||||
member_callback
|
||||
};
|
||||
etl::delegate_service<Size, Offset, delegate_list> service;
|
||||
|
||||
etl::delegate_service<SIZE, OFFSET, delegate_list> service;
|
||||
|
||||
service.call<GLOBAL>();
|
||||
CHECK_EQUAL(GLOBAL, called_id);
|
||||
service.call<Global>();
|
||||
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<MEMBER>();
|
||||
CHECK_EQUAL(MEMBER, called_id);
|
||||
service.call<Member>();
|
||||
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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user