Poco

template < class TArgs, class TDelegate >

class NotificationStrategy

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

virtual ~NotificationStrategy() = default;

Member Functions

add virtual

virtual DelegateHandle add(
    const TDelegate & delegate
) = 0;

Adds a delegate to the strategy.

clear virtual

virtual void clear() = 0;

Removes all delegates from the strategy.

detach virtual

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

virtual DelegatePtr detach(
    DelegateHandle delegateHandle
) = 0;

Same as detach(const TDelegate&), keyed by handle.

detachAll virtual

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

virtual bool empty() const = 0;

Returns false if the strategy contains at least one delegate.

notify virtual

virtual void notify(
    const void * sender,
    TArgs & arguments
) = 0;

Sends a notification to all registered delegates.

remove virtual

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

virtual void remove(
    DelegateHandle delegateHandle
) = 0;

Removes a delegate from the strategy, if found. Does nothing if the delegate has not been added.