Loading...
Searching...
No Matches
ListenerList< ListenerClass, ArrayType > Class Template Reference

Holds a set of objects and can invoke a member function callback on each object in the set with a single call. More...

#include <juce_ListenerList.h>

Classes

struct  DummyBailOutChecker
 A dummy bail-out checker that always returns false. More...
 

Public Types

using ThisType = ListenerList<ListenerClass, ArrayType>
 
using ListenerType = ListenerClass
 

Public Member Functions

 ListenerList ()=default
 Creates an empty list.
 
 ~ListenerList ()
 Destructor.
 
void add (ListenerClass *listenerToAdd)
 Adds a listener to the list.
 
void remove (ListenerClass *listenerToRemove)
 Removes a listener from the list.
 
ErasedScopeGuard addScoped (ListenerClass &listenerToAdd)
 Adds a listener that will be automatically removed again when the Guard is destroyed.
 
int size () const noexcept
 Returns the number of registered listeners.
 
bool isEmpty () const noexcept
 Returns true if no listeners are registered, false otherwise.
 
void clear ()
 Clears the list.
 
bool contains (ListenerClass *listener) const noexcept
 Returns true if the specified listener has been added to the list.
 
const ArrayType & getListeners () const noexcept
 Returns the raw array of listeners.
 
template<typename Callback >
void call (Callback &&callback)
 Calls an invokable object for each listener in the list.
 
template<typename Callback >
void callExcluding (ListenerClass *listenerToExclude, Callback &&callback)
 Calls an invokable object for each listener in the list, except for the listener specified by listenerToExclude.
 
template<typename Callback , typename BailOutCheckerType >
void callChecked (const BailOutCheckerType &bailOutChecker, Callback &&callback)
 Calls an invokable object for each listener in the list, additionally checking the bail-out checker before each call.
 
template<typename Callback , typename BailOutCheckerType >
void callCheckedExcluding (ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, Callback &&callback)
 Calls an invokable object for each listener in the list, except for the listener specified by listenerToExclude, additionally checking the bail-out checker before each call.
 
template<typename... MethodArgs, typename... Args>
void call (void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
 Calls a specific listener method for each listener in the list.
 
template<typename... MethodArgs, typename... Args>
void callExcluding (ListenerClass *listenerToExclude, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
 Calls a specific listener method for each listener in the list, except for the listener specified by listenerToExclude.
 
template<typename BailOutCheckerType , typename... MethodArgs, typename... Args>
void callChecked (const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
 Calls a specific listener method for each listener in the list, additionally checking the bail-out checker before each call.
 
template<typename BailOutCheckerType , typename... MethodArgs, typename... Args>
void callCheckedExcluding (ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
 Calls a specific listener method for each listener in the list, except for the listener specified by listenerToExclude, additionally checking the bail-out checker before each call.
 

Detailed Description

template<typename ListenerClass, typename ArrayType = Array<ListenerClass*>>
class ListenerList< ListenerClass, ArrayType >

Holds a set of objects and can invoke a member function callback on each object in the set with a single call.

It is safe to add listeners, remove listeners, clear the listeners, and even delete the ListenerList itself during any listener callback. If you don't need these extra guarantees consider using a LightweightListenerList instead.

If a Listener is added during a callback, it is guaranteed not to be called in the same iteration.

If a Listener is removed during a callback, it is guaranteed not to be called if it hasn't already been called.

If the ListenerList is cleared or deleted during a callback, it is guaranteed that no more listeners will be called.

It is NOT safe to make concurrent calls to the listeners without a mutex. If you need this functionality, either use a LightweightListenerList or a ThreadSafeListenerList.

When calling listeners the iteration can be escaped early by using a "BailOutChecker". A BailOutChecker is a type that has a public member function with the following signature:

bool shouldBailOut() const

This function will be called before making a call to each listener. For an example see the DummyBailOutChecker.

See also
LightweightListenerList, ThreadSafeListenerList

Member Typedef Documentation

◆ ThisType

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
using ListenerList< ListenerClass, ArrayType >::ThisType = ListenerList<ListenerClass, ArrayType>

◆ ListenerType

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
using ListenerList< ListenerClass, ArrayType >::ListenerType = ListenerClass

Constructor & Destructor Documentation

◆ ListenerList()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
ListenerList< ListenerClass, ArrayType >::ListenerList ( )
default

Creates an empty list.

◆ ~ListenerList()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
ListenerList< ListenerClass, ArrayType >::~ListenerList ( )

Member Function Documentation

◆ add()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
void ListenerList< ListenerClass, ArrayType >::add ( ListenerClass * listenerToAdd)

Adds a listener to the list.

A listener can only be added once, so if the listener is already in the list, this method has no effect.

If a Listener is added during a callback, it is guaranteed not to be called in the same iteration.

See also
remove

References jassertfalse.

Referenced by ListenerList< ListenerClass, ArrayType >::addScoped().

◆ remove()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
void ListenerList< ListenerClass, ArrayType >::remove ( ListenerClass * listenerToRemove)

Removes a listener from the list.

If the listener wasn't in the list, this has no effect.

If a Listener is removed during a callback, it is guaranteed not to be called if it hasn't already been called.

References end(), and jassert.

Referenced by ListenerList< ListenerClass, ArrayType >::addScoped().

◆ addScoped()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
ErasedScopeGuard ListenerList< ListenerClass, ArrayType >::addScoped ( ListenerClass & listenerToAdd)
nodiscard

Adds a listener that will be automatically removed again when the Guard is destroyed.

Be very careful to ensure that the ErasedScopeGuard is destroyed or released before the ListenerList is destroyed, otherwise the ErasedScopeGuard may attempt to dereference a dangling pointer when it is destroyed, which will result in a crash.

References ListenerList< ListenerClass, ArrayType >::add(), and ListenerList< ListenerClass, ArrayType >::remove().

◆ size()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
int ListenerList< ListenerClass, ArrayType >::size ( ) const
nodiscardnoexcept

Returns the number of registered listeners.

◆ isEmpty()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
bool ListenerList< ListenerClass, ArrayType >::isEmpty ( ) const
nodiscardnoexcept

Returns true if no listeners are registered, false otherwise.

◆ clear()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
void ListenerList< ListenerClass, ArrayType >::clear ( )

Clears the list.

If the ListenerList is cleared during a callback, it is guaranteed that no more listeners will be called.

Referenced by ListenerList< ListenerClass, ArrayType >::~ListenerList().

◆ contains()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
bool ListenerList< ListenerClass, ArrayType >::contains ( ListenerClass * listener) const
nodiscardnoexcept

Returns true if the specified listener has been added to the list.

◆ getListeners()

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
const ArrayType & ListenerList< ListenerClass, ArrayType >::getListeners ( ) const
nodiscardnoexcept

Returns the raw array of listeners.

Any attempt to mutate the array may result in undefined behaviour.

If the array uses a mutex/CriticalSection, reading from the array without first obtaining the lock may potentially result in undefined behaviour.

See also
add, remove, clear, contains

◆ call() [1/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename Callback >
void ListenerList< ListenerClass, ArrayType >::call ( Callback && callback)

Calls an invokable object for each listener in the list.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().

◆ callExcluding() [1/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename Callback >
void ListenerList< ListenerClass, ArrayType >::callExcluding ( ListenerClass * listenerToExclude,
Callback && callback )

Calls an invokable object for each listener in the list, except for the listener specified by listenerToExclude.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().

◆ callChecked() [1/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename Callback , typename BailOutCheckerType >
void ListenerList< ListenerClass, ArrayType >::callChecked ( const BailOutCheckerType & bailOutChecker,
Callback && callback )

Calls an invokable object for each listener in the list, additionally checking the bail-out checker before each call.

See the class description for info about writing a bail-out checker.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().

◆ callCheckedExcluding() [1/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename Callback , typename BailOutCheckerType >
void ListenerList< ListenerClass, ArrayType >::callCheckedExcluding ( ListenerClass * listenerToExclude,
const BailOutCheckerType & bailOutChecker,
Callback && callback )

Calls an invokable object for each listener in the list, except for the listener specified by listenerToExclude, additionally checking the bail-out checker before each call.

See the class description for info about writing a bail-out checker.

References GenericScopedTryLock< LockType >::isLocked(), and jassert.

Referenced by ListenerList< ListenerClass, ArrayType >::call(), ListenerList< ListenerClass, ArrayType >::call(), ListenerList< ListenerClass, ArrayType >::callChecked(), ListenerList< ListenerClass, ArrayType >::callChecked(), ListenerList< ListenerClass, ArrayType >::callCheckedExcluding(), ListenerList< ListenerClass, ArrayType >::callExcluding(), and ListenerList< ListenerClass, ArrayType >::callExcluding().

◆ call() [2/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename... MethodArgs, typename... Args>
void ListenerList< ListenerClass, ArrayType >::call ( void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )

Calls a specific listener method for each listener in the list.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().

◆ callExcluding() [2/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename... MethodArgs, typename... Args>
void ListenerList< ListenerClass, ArrayType >::callExcluding ( ListenerClass * listenerToExclude,
void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )

Calls a specific listener method for each listener in the list, except for the listener specified by listenerToExclude.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().

◆ callChecked() [2/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename BailOutCheckerType , typename... MethodArgs, typename... Args>
void ListenerList< ListenerClass, ArrayType >::callChecked ( const BailOutCheckerType & bailOutChecker,
void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )

Calls a specific listener method for each listener in the list, additionally checking the bail-out checker before each call.

See the class description for info about writing a bail-out checker.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().

◆ callCheckedExcluding() [2/2]

template<typename ListenerClass , typename ArrayType = Array<ListenerClass*>>
template<typename BailOutCheckerType , typename... MethodArgs, typename... Args>
void ListenerList< ListenerClass, ArrayType >::callCheckedExcluding ( ListenerClass * listenerToExclude,
const BailOutCheckerType & bailOutChecker,
void(ListenerClass::* callbackFunction )(MethodArgs...),
Args &&... args )

Calls a specific listener method for each listener in the list, except for the listener specified by listenerToExclude, additionally checking the bail-out checker before each call.

See the class description for info about writing a bail-out checker.

References ListenerList< ListenerClass, ArrayType >::callCheckedExcluding().


The documentation for this class was generated from the following file:
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram