14#include "arccore/common/Event.h"
16#include "arccore/base/FatalErrorException.h"
18#include "arccore/common/Array.h"
47 std::set<EventObserverBase*> m_auto_destroy_observers;
48 std::set<EventObserverBase*> m_observers;
70 std::cerr <<
"ERROR: Exception launched during call to ~EventObservableBase().\n";
78void EventObservableBase::
79_rebuildObserversArray()
81 m_observers_array.clear();
82 m_observers_array.reserve(m_p->m_observers.size());
83 for (
auto o : m_p->m_observers)
84 m_observers_array.add(o);
90void EventObservableBase::
91_attachObserver(EventObserverBase* obs,
bool is_auto_destroy)
94 if (m_p->m_observers.find(obs) != m_p->m_observers.end())
95 ARCCORE_FATAL(
"Observer is already attached to this observable");
96 obs->_notifyAttach(
this);
97 m_p->m_observers.insert(obs);
98 _rebuildObserversArray();
100 m_p->m_auto_destroy_observers.insert(obs);
106void EventObservableBase::
107_detachObserver(EventObserverBase* obs)
113 for (
auto o : m_p->m_observers)
115 m_p->m_observers.erase(o);
122 ARCCORE_FATAL(
"observer is not registered to this observable");
123 obs->_notifyDetach();
124 _rebuildObserversArray();
130void EventObservableBase::
133 for(
auto o : m_p->m_observers )
135 m_p->m_observers.clear();
136 for(
auto o : m_p->m_auto_destroy_observers )
147~EventObserverBase() ARCCORE_NOEXCEPT_FALSE
150 m_observable->_detachObserver(
this);
156void EventObserverBase::
160 ARCCORE_FATAL(
"EventObserver is not attached to an EventObservable");
161 m_observable =
nullptr;
167void EventObserverBase::
168_notifyAttach(EventObservableBase* obs)
171 ARCCORE_FATAL(
"EventObserver is already attached to an EventObservable");
193 for(
auto o : m_observers )
204 m_observers.add(obs);
#define ARCCORE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Classe de base d'un observateur d'évènement.
void clear()
Supprime tous les observateurs associés à cette instance.
void add(EventObserverBase *x)
Ajoute l'observateur x.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-