24 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
25 template <
typename TMemberFunction,
typename... Arguments>
27 for (
const auto &handler : registered_handlers) {
28 if (handler.second.*
function) {
29 (handler.second.*
function) (arguments...);
38 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
39 template <
typename TMemberFunction,
typename... Arguments>
41 for (
const auto &handler : registered_handlers) {
42 if (handler.second.*
function) {
43 (handler.second.*
function) (std::forward<Arguments> (arguments)...);
54 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
55 template <
typename TReturnType,
typename TMemberFunction,
typename... Arguments>
57 const std::function<TReturnType (TReturnType, TReturnType)> &combine,
58 TMemberFunction
function,
const Arguments &... arguments) {
59 for (
auto handler = registered_handlers.begin(); handler != registered_handlers.end(); handler++) {
60 if (handler->second.*
function) {
61 TReturnType computed_result = (handler->second.*
function) (arguments...);
62 while (++handler != registered_handlers.end()) {
63 if (handler->second.*
function) {
64 computed_result = combine ((handler->second.*
function) (arguments...), computed_result);
67 return computed_result;
70 return default_result;
78 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
79 template <
typename TMemberFunction,
typename... Arguments>
81 return aggregate (default_result, std::function<
bool (
bool,
bool)> (std::logical_and <bool>()),
82 function, arguments...);
90 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
91 template <
typename TMemberFunction,
typename... Arguments>
93 return aggregate (default_result, std::function<
bool (
bool,
bool)> (std::logical_or <bool>()),
94 function, arguments...);
100 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
102 registered_handlers [client_id] = handlers;
107 template <
typename TOwner,
typename TCallbacks,
typename TCallbackClientId>
109 registered_handlers.erase (client_id);
TReturnType aggregate(TReturnType result, const std::function< TReturnType(TReturnType, TReturnType)> &combine, TMemberFunction function, const Arguments &... arguments)
Invoke a delegate function and aggregate the results.
Definition: callbackimpl.h:56
void callback(TMemberFunction function, Arguments &&... arguments)
Invoke a callback function.
Definition: callbackimpl.h:40
void notify(TMemberFunction function, const Arguments &... arguments)
Invoke a notification function.
Definition: callbackimpl.h:26
void unsubscribe(const TCallbackClientId client_id)
Remove registered callbacks, delegates, or notifications.
Definition: callbackimpl.h:108
bool queryAnyApproval(bool default_result, TMemberFunction function, const Arguments &... arguments)
Check for approval by any delegate.
Definition: callbackimpl.h:92
void subscribe(const TCallbackClientId client_id, const TCallbacks &handlers)
Register callback, delegate, or notification functions.
Definition: callbackimpl.h:101
bool queryUnanimousApproval(bool default_result, TMemberFunction function, const Arguments &... arguments)
Check for approval from all delegates.
Definition: callbackimpl.h:80