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 "static_assert.h"
#include "function.h"
#include "array.h"
namespace etl
{
@ -51,14 +52,11 @@ namespace etl
/// Reset the callback service.
/// 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[i] = &unhandled_callback;
}
p_unhandled = nullptr;
lookup.fill(&unhandled_callback);
}
//*************************************************************************
@ -68,7 +66,7 @@ namespace etl
/// \param callback reference to the callback.
//*************************************************************************
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");
@ -81,7 +79,7 @@ namespace etl
/// \param id Id of 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)
{
@ -95,7 +93,7 @@ namespace etl
/// \tparam ID The id of the callback.
//*************************************************************************
template <const size_t ID>
static void callback()
void callback()
{
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.
/// \param id Id of the callback.
//*************************************************************************
static void callback(const size_t id)
void callback(const size_t id)
{
if (id < NUMBER_OF_CALLBACKS)
{
@ -122,7 +120,7 @@ namespace etl
/// Registers an alternative callback for unhandled ids.
/// \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;
}
@ -133,7 +131,7 @@ namespace etl
/// The default callback function.
/// Does nothing.
//*************************************************************************
static void unhandled(size_t id)
void unhandled(size_t id)
{
if (p_unhandled != nullptr)
{
@ -142,23 +140,14 @@ namespace etl
}
/// 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.
static etl::ifunction<size_t>* p_unhandled;
etl::ifunction<size_t>* p_unhandled;
/// 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

View File

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