1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

ValueTree: Optimise when listeners don't remove themselves

This commit is contained in:
Anthony Nicholls 2024-06-01 01:24:16 +01:00
parent a469daf5be
commit 315167a91a

View file

@ -76,23 +76,21 @@ public:
template <typename Function>
void callListeners (ValueTree::Listener* listenerToExclude, Function fn) const
{
auto numListeners = valueTreesWithListeners.size();
if (valueTreesWithListeners.size() == 0)
return;
if (numListeners == 1)
if (valueTreesWithListeners.size() == 1)
{
valueTreesWithListeners.getUnchecked (0)->listeners.callExcluding (listenerToExclude, fn);
return;
}
else if (numListeners > 0)
const auto listenersCopy = valueTreesWithListeners;
for (auto [i, v] : enumerate (listenersCopy, int{}))
{
auto listenersCopy = valueTreesWithListeners;
for (int i = 0; i < numListeners; ++i)
{
auto* v = listenersCopy.getUnchecked (i);
if (i == 0 || valueTreesWithListeners.contains (v))
v->listeners.callExcluding (listenerToExclude, fn);
}
if (valueTreesWithListeners[i] == v || valueTreesWithListeners.contains (v))
v->listeners.callExcluding (listenerToExclude, fn);
}
}