67template <
class ListenerClass,
68 class ArrayType = Array<ListenerClass*>>
91 void add (ListenerClass* listenerToAdd)
93 if (listenerToAdd !=
nullptr)
94 listeners.addIfNotAlreadyThere (listenerToAdd);
102 void remove (ListenerClass* listenerToRemove)
104 jassert (listenerToRemove !=
nullptr);
106 typename ArrayType::ScopedLockType lock (
listeners.getLock());
108 const auto index =
listeners.removeFirstMatchingValue (listenerToRemove);
112 if (0 <= index && index < iter.get().index)
127 bool contains (ListenerClass* listener)
const noexcept {
return listeners.contains (listener); }
134 template <
typename Callback>
137 typename ArrayType::ScopedLockType lock (
listeners.getLock());
139 for (WrappedIterator iter (*
this,
activeIterators); iter.get().next();)
140 callback (*iter.get().getListener());
146 template <
typename Callback>
149 typename ArrayType::ScopedLockType lock (
listeners.getLock());
151 for (WrappedIterator iter (*
this,
activeIterators); iter.get().next();)
153 auto*
l = iter.get().getListener();
155 if (
l != listenerToExclude)
163 template <
typename Callback,
typename BailOutCheckerType>
166 typename ArrayType::ScopedLockType lock (
listeners.getLock());
168 for (WrappedIterator iter (*
this,
activeIterators); iter.get().next (bailOutChecker);)
170 callback (*iter.get().getListener());
178 template <
typename Callback,
typename BailOutCheckerType>
180 const BailOutCheckerType& bailOutChecker,
183 typename ArrayType::ScopedLockType lock (
listeners.getLock());
185 for (WrappedIterator iter (*
this,
activeIterators); iter.get().next (bailOutChecker);)
187 auto*
l = iter.get().getListener();
189 if (
l != listenerToExclude)
211 :
list (listToIterate),
index (listToIterate.size())
220 auto listSize =
list.size();
222 if (--
index < listSize)
225 index = listSize - 1;
229 template <
class BailOutCheckerType>
230 bool next (
const BailOutCheckerType& bailOutChecker)
noexcept
232 return (! bailOutChecker.shouldBailOut()) &&
next();
237 return list.getListeners().getUnchecked (
index);
251 void call (
void (ListenerClass::*callbackFunction) ())
253 call ([=] (ListenerClass&
l) { (
l.*callbackFunction)(); });
256 void callExcluding (ListenerClass* listenerToExclude,
void (ListenerClass::*callbackFunction) ())
258 callExcluding (listenerToExclude, [=] (ListenerClass&
l) { (
l.*callbackFunction)(); });
261 template <
class BailOutCheckerType>
262 void callChecked (
const BailOutCheckerType& bailOutChecker,
void (ListenerClass::*callbackFunction) ())
264 callChecked (bailOutChecker, [=] (ListenerClass&
l) { (
l.*callbackFunction)(); });
267 template <
class BailOutCheckerType>
269 const BailOutCheckerType& bailOutChecker,
270 void (ListenerClass::*callbackFunction) ())
272 callCheckedExcluding (listenerToExclude, bailOutChecker, [=] (ListenerClass&
l) { (
l.*callbackFunction)(); });
275 template <
typename... MethodArgs,
typename... Args>
276 void call (
void (ListenerClass::*callbackFunction) (MethodArgs...), Args&&... args)
278 typename ArrayType::ScopedLockType lock (
listeners.getLock());
280 for (Iterator iter (*
this); iter.next();)
284 template <
typename... MethodArgs,
typename... Args>
286 void (ListenerClass::*callbackFunction) (MethodArgs...),
289 typename ArrayType::ScopedLockType lock (
listeners.getLock());
291 for (Iterator iter (*
this); iter.next();)
292 if (iter.getListener() != listenerToExclude)
296 template <
typename BailOutCheckerType,
typename... MethodArgs,
typename... Args>
298 void (ListenerClass::*callbackFunction) (MethodArgs...),
301 typename ArrayType::ScopedLockType lock (
listeners.getLock());
303 for (Iterator iter (*
this); iter.next (bailOutChecker);)
307 template <
typename BailOutCheckerType,
typename... MethodArgs,
typename... Args>
309 const BailOutCheckerType& bailOutChecker,
310 void (ListenerClass::*callbackFunction) (MethodArgs...),
313 typename ArrayType::ScopedLockType lock (
listeners.getLock());
315 for (Iterator iter (*
this); iter.next (bailOutChecker);)
316 if (iter.getListener() != listenerToExclude)
339 template <
typename Callback>
342 for (
auto*
p = wrapped;
p !=
nullptr;
p =
p->next)
#define noexcept
Definition DistrhoDefines.h:72
WrappedIterator(const ListenerList &listToIterate, WrappedIterator *&listHeadIn)
Definition juce_ListenerList.h:325
~WrappedIterator()
Definition juce_ListenerList.h:331
void invalidate() noexcept
Definition juce_ListenerList.h:346
WrappedIterator *& listHead
Definition juce_ListenerList.h:350
WrappedIterator * next
Definition juce_ListenerList.h:351
Iterator it
Definition juce_ListenerList.h:349
bool valid
Definition juce_ListenerList.h:352
auto & get() noexcept
Definition juce_ListenerList.h:337
static void forEach(WrappedIterator *wrapped, Callback &&cb)
Definition juce_ListenerList.h:340
void callChecked(const BailOutCheckerType &bailOutChecker, Callback &&callback)
Definition juce_ListenerList.h:164
void callCheckedExcluding(ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)())
Definition juce_ListenerList.h:268
ArrayType listeners
Definition juce_ListenerList.h:356
void callChecked(const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)())
Definition juce_ListenerList.h:262
bool isEmpty() const noexcept
Definition juce_ListenerList.h:121
void callCheckedExcluding(ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, Callback &&callback)
Definition juce_ListenerList.h:179
void callChecked(const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
Definition juce_ListenerList.h:297
void call(Callback &&callback)
Definition juce_ListenerList.h:135
void callExcluding(ListenerClass *listenerToExclude, Callback &&callback)
Definition juce_ListenerList.h:147
void callCheckedExcluding(ListenerClass *listenerToExclude, const BailOutCheckerType &bailOutChecker, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
Definition juce_ListenerList.h:308
void call(void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
Definition juce_ListenerList.h:276
void call(void(ListenerClass::*callbackFunction)())
Definition juce_ListenerList.h:251
void add(ListenerClass *listenerToAdd)
Definition juce_ListenerList.h:91
void remove(ListenerClass *listenerToRemove)
Definition juce_ListenerList.h:102
void callExcluding(ListenerClass *listenerToExclude, void(ListenerClass::*callbackFunction)())
Definition juce_ListenerList.h:256
bool contains(ListenerClass *listener) const noexcept
Definition juce_ListenerList.h:127
int size() const noexcept
Definition juce_ListenerList.h:118
void callExcluding(ListenerClass *listenerToExclude, void(ListenerClass::*callbackFunction)(MethodArgs...), Args &&... args)
Definition juce_ListenerList.h:285
WrappedIterator * activeIterators
Definition juce_ListenerList.h:357
ListenerClass ListenerType
Definition juce_ListenerList.h:204
const ArrayType & getListeners() const noexcept
Definition juce_ListenerList.h:130
void clear()
Definition juce_ListenerList.h:124
~ListenerList()
Definition juce_ListenerList.h:77
ListenerList< ListenerClass, ArrayType > ThisType
Definition juce_ListenerList.h:203
int * l
Definition inflate.c:1579
Definition carla_juce.cpp:31
Definition juce_ListenerList.h:199
bool shouldBailOut() const noexcept
Definition juce_ListenerList.h:200
Definition juce_ListenerList.h:209
bool next() noexcept
Definition juce_ListenerList.h:215
int index
Definition juce_ListenerList.h:242
Iterator(const ListenerList &listToIterate) noexcept
Definition juce_ListenerList.h:210
ListenerClass * getListener() const noexcept
Definition juce_ListenerList.h:235
const ListenerList & list
Definition juce_ListenerList.h:241
friend ListenerList
Definition juce_ListenerList.h:244
bool next(const BailOutCheckerType &bailOutChecker) noexcept
Definition juce_ListenerList.h:230
const Type & type
Definition juce_MathsFunctions.h:632
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
uch * p
Definition crypt.c:594
#define const
Definition zconf.h:137