14#include "arccore/common/Event.h"
16#include "arccore/base/FatalErrorException.h"
18#include "arccore/common/Array.h"
49 std::set<EventObserverBase*> m_auto_destroy_observers;
50 std::set<EventObserverBase*> m_observers;
72 std::cerr <<
"ERROR: Exception launched during call to ~EventObservableBase().\n";
80void EventObservableBase::
81_rebuildObserversArray()
83 m_observers_array.clear();
84 m_observers_array.reserve(m_p->m_observers.size());
85 for (
auto o : m_p->m_observers)
86 m_observers_array.add(o);
92void EventObservableBase::
93_attachObserver(EventObserverBase* obs,
bool is_auto_destroy)
96 if (m_p->m_observers.find(obs) != m_p->m_observers.end())
97 ARCCORE_FATAL(
"Observer is already attached to this observable");
98 obs->_notifyAttach(
this);
99 m_p->m_observers.insert(obs);
100 _rebuildObserversArray();
102 m_p->m_auto_destroy_observers.insert(obs);
108void EventObservableBase::
109_detachObserver(EventObserverBase* obs)
115 for (
auto o : m_p->m_observers)
117 m_p->m_observers.erase(o);
124 ARCCORE_FATAL(
"observer is not registered to this observable");
125 obs->_notifyDetach();
126 _rebuildObserversArray();
132void EventObservableBase::
135 for (
auto o : m_p->m_observers)
137 m_p->m_observers.clear();
138 for (
auto o : m_p->m_auto_destroy_observers)
149~EventObserverBase() ARCCORE_NOEXCEPT_FALSE
152 m_observable->_detachObserver(
this);
158void EventObserverBase::
162 ARCCORE_FATAL(
"EventObserver is not attached to an EventObservable");
163 m_observable =
nullptr;
169void EventObserverBase::
170_notifyAttach(EventObservableBase* obs)
173 ARCCORE_FATAL(
"EventObserver is already attached to an EventObservable");
195 for (
auto o : m_observers)
206 m_observers.add(obs);
#define ARCCORE_FATAL(...)
Macro throwing a FatalErrorException.
Base class for an event observer.
void clear()
Clears all observers associated with this instance.
void add(EventObserverBase *x)
Adds the observer x.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --