31#ifndef ETL_DELEGATE_SERVICE_INCLUDED
32#define ETL_DELEGATE_SERVICE_INCLUDED
38#include "static_assert.h"
49#if ETL_USING_CPP11 && !defined(ETL_DELEGATE_FORCE_CPP03_IMPLEMENTATION)
50 template <
size_t Range,
size_t Offset = 0U, const etl::delegate<
void(
size_t)>* Delegates =
nullptr>
55 typedef etl::delegate<void(
size_t)> delegate_type;
65 ETL_STATIC_ASSERT(Id < (Offset + Range),
"Callback Id out of range");
66 ETL_STATIC_ASSERT(Id >= Offset,
"Callback Id out of range");
68 Delegates[Id - Offset](Id);
75 void call(
size_t id)
const
77 if ((
id >= Offset) && (
id < (Offset + Range)))
80 Delegates[
id - Offset](id);
97 template <
size_t Range,
size_t Offset>
98#if ETL_USING_CPP11 && !defined(ETL_DELEGATE_FORCE_CPP03_IMPLEMENTATION)
114 delegate_type default_delegate = delegate_type::create<delegate_service<Range, Offset>, &delegate_service<Range, Offset>::unhandled>(*this);
116 lookup.fill(default_delegate);
128 ETL_STATIC_ASSERT(Id < (Offset + Range),
"Callback Id out of range");
129 ETL_STATIC_ASSERT(Id >= Offset,
"Callback Id out of range");
142 if ((
id >= Offset) && (
id < (Offset + Range)))
165 ETL_STATIC_ASSERT(Id < (Offset + Range),
"Callback Id out of range");
166 ETL_STATIC_ASSERT(Id >= Offset,
"Callback Id out of range");
168 lookup[Id - Offset](Id);
175 void call(
const size_t id)
const
177 if ((
id >= Offset) && (
id < (Offset + Range)))
180 lookup[
id - Offset](id);
195 void unhandled(
size_t id)
const
197 if (unhandled_delegate.is_valid())
199 unhandled_delegate(
id);
204 delegate_type unhandled_delegate;
207 etl::array<delegate_type, Range> lookup;
Definition delegate_service.h:103
delegate_service()
Definition delegate_service.h:112
void call() const
Definition delegate_service.h:163
void register_delegate(size_t id, delegate_type callback)
Definition delegate_service.h:140
void register_delegate(delegate_type callback)
Definition delegate_service.h:126
void register_unhandled_delegate(delegate_type callback)
Definition delegate_service.h:152
void call(const size_t id) const
Definition delegate_service.h:175
Declaration.
Definition delegate_cpp03.h:191
bitset_ext
Definition absolute.h:40