mirror of
https://github.com/ETLCPP/etl.git
synced 2026-11-11 07:39:51 +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 "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
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user