Replace the custom logic in ObserverList with an nsTObserverArray which has all the necessary logic for stable iteration over a potentially changing list of items.

This commit is contained in:
wolfbeast 2018-09-11 10:17:37 +02:00 committed by Roy Tam
commit 69c4dd8992

View file

@ -7,7 +7,7 @@
#ifndef mozilla_Observer_h
#define mozilla_Observer_h
#include "nsTArray.h"
#include "nsTObserverArray.h"
namespace mozilla {
@ -48,7 +48,7 @@ public:
*/
void AddObserver(Observer<T>* aObserver)
{
mObservers.AppendElement(aObserver);
mObservers.AppendElementUnlessExists(aObserver);
}
/**
@ -67,15 +67,15 @@ public:
void Broadcast(const T& aParam)
{
nsTArray<Observer<T>*> observersCopy(mObservers);
uint32_t size = observersCopy.Length();
for (uint32_t i = 0; i < size; ++i) {
observersCopy[i]->Notify(aParam);
typename nsTObserverArray<Observer<T>*>::ForwardIterator iter(mObservers);
while (iter.HasMore()) {
Observer<T>* obs = iter.GetNext();
obs->Notify(aParam);
}
}
protected:
nsTArray<Observer<T>*> mObservers;
nsTObserverArray<Observer<T>*> mObservers;
};
} // namespace mozilla