Library: Foundation
Package: Events
Header: Poco/NotificationStrategy.h
Description
The interface that all notification strategies must implement.
Note: Event is based on policy-driven design, so every strategy implementation must provide all the methods from this interface (otherwise: compile errors) but does not need to inherit from NotificationStrategy.
Member Summary
Member Functions: add, clear, detach, detachAll, empty, notify, remove
Types Aliases
DelegateHandle
using DelegateHandle = TDelegate *;
DelegatePtr
using DelegatePtr = SharedPtr < TDelegate >;
Delegates
using Delegates = std::vector < DelegatePtr >;
Constructors
NotificationStrategy
NotificationStrategy() = default;
Destructor
~NotificationStrategy
virtual ~NotificationStrategy() = default;
Member Functions
add
virtual DelegateHandle add(
const TDelegate & delegate
) = 0;
Adds a delegate to the strategy.
clear
virtual void clear() = 0;
Removes all delegates from the strategy.
detach
virtual DelegatePtr detach(
const TDelegate & delegate
) = 0;
Removes a matching delegate from the strategy without disabling it, and returns the detached delegate (or an empty DelegatePtr if no match). The caller is responsible for calling disable() on the returned delegate. AbstractEvent uses this to avoid holding the event mutex across Delegate::disable() — see AbstractEvent::operator -= for the lock-order rationale.
detach
virtual DelegatePtr detach(
DelegateHandle delegateHandle
) = 0;
Same as detach(const TDelegate&), keyed by handle.
detachAll
virtual Delegates detachAll() = 0;
Removes all delegates from the strategy without disabling them and returns them, so the caller can disable() each outside its own mutex. AbstractEvent::clear() uses this for the same reason detach() exists.
empty
virtual bool empty() const = 0;
Returns false if the strategy contains at least one delegate.
notify
virtual void notify(
const void * sender,
TArgs & arguments
) = 0;
Sends a notification to all registered delegates.
remove
virtual void remove(
const TDelegate & delegate
) = 0;
Removes a delegate from the strategy, if found. Does nothing if the delegate has not been added.
remove
virtual void remove(
DelegateHandle delegateHandle
) = 0;
Removes a delegate from the strategy, if found. Does nothing if the delegate has not been added.