Changed from static to normal class

This commit is contained in:
John Wellbelove 2019-02-03 10:24:47 +00:00
parent 4c713d38f0
commit 2cef994d5b
2 changed files with 79 additions and 79 deletions

View File

@ -34,6 +34,7 @@ SOFTWARE.
#include "nullptr.h" #include "nullptr.h"
#include "static_assert.h" #include "static_assert.h"
#include "function.h" #include "function.h"
#include "array.h"
namespace etl namespace etl
{ {
@ -51,14 +52,11 @@ namespace etl
/// Reset the callback service. /// Reset the callback service.
/// Sets all callbacks to the internal default. /// Sets all callbacks to the internal default.
//************************************************************************* //*************************************************************************
static void initialize() callback_service()
: unhandled_callback(*this, &callback_service<NUMBER_OF_CALLBACKS>::unhandled),
p_unhandled(nullptr)
{ {
for (size_t i = 0; i < NUMBER_OF_CALLBACKS; ++i) lookup.fill(&unhandled_callback);
{
lookup[i] = &unhandled_callback;
}
p_unhandled = nullptr;
} }
//************************************************************************* //*************************************************************************
@ -68,7 +66,7 @@ namespace etl
/// \param callback reference to the callback. /// \param callback reference to the callback.
//************************************************************************* //*************************************************************************
template <const size_t ID> template <const size_t ID>
static void register_callback(etl::ifunction<size_t>& callback) void register_callback(etl::ifunction<size_t>& callback)
{ {
ETL_STATIC_ASSERT(ID < NUMBER_OF_CALLBACKS, "Callback Id out of range"); ETL_STATIC_ASSERT(ID < NUMBER_OF_CALLBACKS, "Callback Id out of range");
@ -81,7 +79,7 @@ namespace etl
/// \param id Id of the callback. /// \param id Id of the callback.
/// \param callback Reference to the callback. /// \param callback Reference to the callback.
//************************************************************************* //*************************************************************************
static void register_callback(const size_t id, etl::ifunction<size_t>& callback) void register_callback(const size_t id, etl::ifunction<size_t>& callback)
{ {
if (id < NUMBER_OF_CALLBACKS) if (id < NUMBER_OF_CALLBACKS)
{ {
@ -95,7 +93,7 @@ namespace etl
/// \tparam ID The id of the callback. /// \tparam ID The id of the callback.
//************************************************************************* //*************************************************************************
template <const size_t ID> template <const size_t ID>
static void callback() void callback()
{ {
ETL_STATIC_ASSERT(ID < NUMBER_OF_CALLBACKS, "Callback Id out of range"); ETL_STATIC_ASSERT(ID < NUMBER_OF_CALLBACKS, "Callback Id out of range");
@ -106,7 +104,7 @@ namespace etl
/// Executes the callback function for the index. /// Executes the callback function for the index.
/// \param id Id of the callback. /// \param id Id of the callback.
//************************************************************************* //*************************************************************************
static void callback(const size_t id) void callback(const size_t id)
{ {
if (id < NUMBER_OF_CALLBACKS) if (id < NUMBER_OF_CALLBACKS)
{ {
@ -122,7 +120,7 @@ namespace etl
/// Registers an alternative callback for unhandled ids. /// Registers an alternative callback for unhandled ids.
/// \param callback A reference to the user supplied 'unhandled' callback. /// \param callback A reference to the user supplied 'unhandled' callback.
//************************************************************************* //*************************************************************************
static void register_unhandled_callback(etl::ifunction<size_t>& callback) void register_unhandled_callback(etl::ifunction<size_t>& callback)
{ {
p_unhandled = &callback; p_unhandled = &callback;
} }
@ -133,7 +131,7 @@ namespace etl
/// The default callback function. /// The default callback function.
/// Does nothing. /// Does nothing.
//************************************************************************* //*************************************************************************
static void unhandled(size_t id) void unhandled(size_t id)
{ {
if (p_unhandled != nullptr) if (p_unhandled != nullptr)
{ {
@ -142,23 +140,14 @@ namespace etl
} }
/// The default callback for unhandled ids. /// The default callback for unhandled ids.
static etl::function_fp<size_t, etl::callback_service<NUMBER_OF_CALLBACKS>::unhandled> unhandled_callback; etl::function<callback_service<NUMBER_OF_CALLBACKS>, size_t> unhandled_callback;
/// Pointer to the user defined 'unhandled' callback. /// Pointer to the user defined 'unhandled' callback.
static etl::ifunction<size_t>* p_unhandled; etl::ifunction<size_t>* p_unhandled;
/// Lookup table of callbacks. /// Lookup table of callbacks.
static etl::ifunction<size_t>* lookup[NUMBER_OF_CALLBACKS]; etl::array<etl::ifunction<size_t>*, NUMBER_OF_CALLBACKS> lookup;
}; };
template <const size_t NUMBER_OF_CALLBACKS>
etl::function_fp<size_t, etl::callback_service<NUMBER_OF_CALLBACKS>::unhandled> etl::callback_service<NUMBER_OF_CALLBACKS>::unhandled_callback;
template <const size_t NUMBER_OF_CALLBACKS>
etl::ifunction<size_t>* etl::callback_service<NUMBER_OF_CALLBACKS>::lookup[NUMBER_OF_CALLBACKS];
template <const size_t NUMBER_OF_CALLBACKS>
etl::ifunction<size_t>* etl::callback_service<NUMBER_OF_CALLBACKS>::p_unhandled = nullptr;
} }
#endif #endif

View File

@ -131,12 +131,13 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_global_compile_time) TEST_FIXTURE(SetupFixture, test_callback_global_compile_time)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER1>(test.callback);
Service::register_callback<MEMBER2>(member_callback);
Service::callback<GLOBAL>(); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER1>(test.callback);
service.register_callback<MEMBER2>(member_callback);
service.callback<GLOBAL>();
CHECK_EQUAL(GLOBAL, called_id); CHECK_EQUAL(GLOBAL, called_id);
CHECK(global_called); CHECK(global_called);
@ -148,12 +149,13 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_global_run_time) TEST_FIXTURE(SetupFixture, test_callback_global_run_time)
{ {
Service::initialize(); Service service;
Service::register_callback(GLOBAL, global_callback);
Service::register_callback(MEMBER1, test.callback);
Service::register_callback(MEMBER2, member_callback);
Service::callback(GLOBAL); service.register_callback(GLOBAL, global_callback);
service.register_callback(MEMBER1, test.callback);
service.register_callback(MEMBER2, member_callback);
service.callback(GLOBAL);
CHECK_EQUAL(GLOBAL, called_id); CHECK_EQUAL(GLOBAL, called_id);
CHECK(global_called); CHECK(global_called);
@ -165,12 +167,13 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_member1_compile_time) TEST_FIXTURE(SetupFixture, test_callback_member1_compile_time)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER1>(test.callback);
Service::register_callback<MEMBER2>(member_callback);
Service::callback<MEMBER1>(); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER1>(test.callback);
service.register_callback<MEMBER2>(member_callback);
service.callback<MEMBER1>();
CHECK_EQUAL(MEMBER1, called_id); CHECK_EQUAL(MEMBER1, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -182,12 +185,13 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_member1_run_time) TEST_FIXTURE(SetupFixture, test_callback_member1_run_time)
{ {
Service::initialize(); Service service;
Service::register_callback(GLOBAL, global_callback);
Service::register_callback(MEMBER1, test.callback);
Service::register_callback(MEMBER2, member_callback);
Service::callback(MEMBER1); service.register_callback(GLOBAL, global_callback);
service.register_callback(MEMBER1, test.callback);
service.register_callback(MEMBER2, member_callback);
service.callback(MEMBER1);
CHECK_EQUAL(MEMBER1, called_id); CHECK_EQUAL(MEMBER1, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -199,12 +203,13 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_member2_compile_time) TEST_FIXTURE(SetupFixture, test_callback_member2_compile_time)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER1>(test.callback);
Service::register_callback<MEMBER2>(member_callback);
Service::callback<MEMBER2>(); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER1>(test.callback);
service.register_callback<MEMBER2>(member_callback);
service.callback<MEMBER2>();
CHECK_EQUAL(MEMBER2, called_id); CHECK_EQUAL(MEMBER2, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -216,12 +221,13 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_unhandled_out_of_range_run_time_default) TEST_FIXTURE(SetupFixture, test_callback_unhandled_out_of_range_run_time_default)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER1>(test.callback);
Service::register_callback<MEMBER2>(member_callback);
Service::callback(OUT_OF_RANGE); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER1>(test.callback);
service.register_callback<MEMBER2>(member_callback);
service.callback(OUT_OF_RANGE);
CHECK_EQUAL(UINT_MAX, called_id); CHECK_EQUAL(UINT_MAX, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -233,14 +239,15 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_unhandled_out_of_range_run_time_user_supplied) TEST_FIXTURE(SetupFixture, test_callback_unhandled_out_of_range_run_time_user_supplied)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER1>(test.callback);
Service::register_callback<MEMBER2>(member_callback);
Service::register_unhandled_callback(unhandled_callback); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER1>(test.callback);
service.register_callback<MEMBER2>(member_callback);
Service::callback(OUT_OF_RANGE); service.register_unhandled_callback(unhandled_callback);
service.callback(OUT_OF_RANGE);
CHECK_EQUAL(OUT_OF_RANGE, called_id); CHECK_EQUAL(OUT_OF_RANGE, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -252,11 +259,12 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_unhandled_not_registered_compile_time_default) TEST_FIXTURE(SetupFixture, test_callback_unhandled_not_registered_compile_time_default)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER2>(member_callback);
Service::callback<MEMBER1>(); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER2>(member_callback);
service.callback<MEMBER1>();
CHECK_EQUAL(UINT_MAX, called_id); CHECK_EQUAL(UINT_MAX, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -268,11 +276,12 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_unhandled_not_registered_run_time_default) TEST_FIXTURE(SetupFixture, test_callback_unhandled_not_registered_run_time_default)
{ {
Service::initialize(); Service service;
Service::register_callback(GLOBAL, global_callback);
Service::register_callback(MEMBER2, member_callback);
Service::callback(MEMBER1); service.register_callback(GLOBAL, global_callback);
service.register_callback(MEMBER2, member_callback);
service.callback(MEMBER1);
CHECK_EQUAL(UINT_MAX, called_id); CHECK_EQUAL(UINT_MAX, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -284,13 +293,14 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_not_registered_compile_time_user_supplied) TEST_FIXTURE(SetupFixture, test_callback_not_registered_compile_time_user_supplied)
{ {
Service::initialize(); Service service;
Service::register_callback<GLOBAL>(global_callback);
Service::register_callback<MEMBER2>(member_callback);
Service::register_unhandled_callback(unhandled_callback); service.register_callback<GLOBAL>(global_callback);
service.register_callback<MEMBER2>(member_callback);
Service::callback<MEMBER1>(); service.register_unhandled_callback(unhandled_callback);
service.callback<MEMBER1>();
CHECK_EQUAL(MEMBER1, called_id); CHECK_EQUAL(MEMBER1, called_id);
CHECK(!global_called); CHECK(!global_called);
@ -302,13 +312,14 @@ namespace
//************************************************************************* //*************************************************************************
TEST_FIXTURE(SetupFixture, test_callback_unhandled_run_time_user_supplied) TEST_FIXTURE(SetupFixture, test_callback_unhandled_run_time_user_supplied)
{ {
Service::initialize(); Service service;
Service::register_callback(GLOBAL, global_callback);
Service::register_callback(MEMBER2, member_callback);
Service::register_unhandled_callback(unhandled_callback); service.register_callback(GLOBAL, global_callback);
service.register_callback(MEMBER2, member_callback);
Service::callback(MEMBER1); service.register_unhandled_callback(unhandled_callback);
service.callback(MEMBER1);
CHECK_EQUAL(MEMBER1, called_id); CHECK_EQUAL(MEMBER1, called_id);
CHECK(!global_called); CHECK(!global_called);