mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Changed from static to normal class
This commit is contained in:
parent
4c713d38f0
commit
2cef994d5b
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user