15#include "arcane/utils/UniqueArray.h"
16#include "arcane/utils/FatalErrorException.h"
45 std::set<EventObserverBase*> m_auto_destroy_observers;
46 std::set<EventObserverBase*> m_observers;
68 std::cerr <<
"ERROR: Exception launched during call to ~EventObservableBase().\n";
76void EventObservableBase::
77_rebuildObserversArray()
79 m_observers_array.clear();
80 m_observers_array.reserve(m_p->m_observers.size());
81 for (
auto o : m_p->m_observers)
82 m_observers_array.add(o);
88void EventObservableBase::
89_attachObserver(EventObserverBase* obs,
bool is_auto_destroy)
92 if (m_p->m_observers.find(obs) != m_p->m_observers.end())
93 ARCANE_FATAL(
"Observer is already attached to this observable");
94 obs->_notifyAttach(
this);
95 m_p->m_observers.insert(obs);
96 _rebuildObserversArray();
98 m_p->m_auto_destroy_observers.insert(obs);
104void EventObservableBase::
105_detachObserver(EventObserverBase* obs)
111 for (
auto o : m_p->m_observers)
113 m_p->m_observers.erase(o);
120 ARCANE_FATAL(
"observer is not registered to this observable");
121 obs->_notifyDetach();
122 _rebuildObserversArray();
128void EventObservableBase::
131 for(
auto o : m_p->m_observers )
133 m_p->m_observers.clear();
134 for(
auto o : m_p->m_auto_destroy_observers )
145~EventObserverBase() ARCANE_NOEXCEPT_FALSE
148 m_observable->_detachObserver(
this);
154void EventObserverBase::
158 ARCANE_FATAL(
"EventObserver is not attached to an EventObservable");
159 m_observable =
nullptr;
165void EventObserverBase::
166_notifyAttach(EventObservableBase* obs)
169 ARCANE_FATAL(
"EventObserver is already attached to an EventObservable");
191 for(
auto o : m_observers )
202 m_observers.add(obs);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fichier contenant les mécanismes de gestion des évènements.
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 -*-