12#ifndef ARCANE_UTILS_EVENT_H
13#define ARCANE_UTILS_EVENT_H
18#include "arcane/utils/Array.h"
34class ARCANE_UTILS_EXPORT EventObservableBase
36 friend EventObserverBase;
41 EventObservableBase();
42 virtual ~EventObservableBase();
46 EventObservableBase(
const EventObservableBase&) =
delete;
47 EventObservableBase(EventObservableBase&&) =
delete;
48 EventObservableBase& operator=(
const EventObservableBase&) =
delete;
49 EventObservableBase& operator=(EventObservableBase&&) =
delete;
53 bool hasObservers()
const {
return !m_observers_array.empty(); }
54 void detachAllObservers();
58 void _attachObserver(EventObserverBase* obs,
bool is_auto_destroy);
59 void _detachObserver(EventObserverBase* obs);
62 return m_observers_array;
72 void _rebuildObserversArray();
84class ARCANE_UTILS_EXPORT EventObserverBase
86 friend class EventObservableBase;
90 EventObserverBase() =
default;
91 virtual ~EventObserverBase() ARCANE_NOEXCEPT_FALSE;
96 void _notifyAttach(EventObservableBase* obs);
100 EventObservableBase* m_observable =
nullptr;
109template <
typename... Args>
111:
public EventObserverBase
120 EventObserver(
const std::function<
void(Args...)>& func)
123 EventObserver(std::function<
void(Args...)>&& func)
126 void observerUpdate(Args... args)
134 std::function<void(Args...)> m_functor;
190template <
typename... Args>
192:
public EventObservableBase
200 EventObservable() =
default;
209 void attach(ObserverType* o) { _attachObserver(o,
false); }
215 void detach(ObserverType* o) { _detachObserver(o); }
221 template <
typename Lambda>
224 auto x =
new ObserverType(lambda);
225 _attachObserver(x,
false);
234 for (
auto o : _observers())
235 ((ObserverType*)o)->observerUpdate(args...);
246template <
typename... Args>
247class EventObservableView
256 : m_observable_ref(v)
266 void attach(ObserverType* o) { m_observable_ref.attach(o); }
272 void detach(ObserverType* o) { m_observable_ref.detach(o); }
278 template <
typename Lambda>
281 m_observable_ref.attach(pool, lambda);
Déclarations des types utilisés dans Arcane.
Vue constante d'un tableau de type T.
void attach(ObserverType *o)
Attache l'observateur o à cet observable.
void detach(ObserverType *o)
Détache l'observateur o de cet observable.
void attach(EventObserverPool &pool, const Lambda &lambda)
Ajoute un observateur utilisant la lambda lambda et conserve une référence dans pool.
Classe de base d'un handler d'évènement.
void detach(ObserverType *o)
Détache l'observateur o de cet observable.
void attach(EventObserverPool &pool, const Lambda &lambda)
Ajoute un observateur utilisant la lambda lambda et conserve une référence dans pool.
void attach(ObserverType *o)
Attache l'observateur o à cet observable.
void notify(Args... args)
Appelle les observeurs associés à cet observable.
Conserve des références d'observateurs.
void clear()
Supprime tous les observateurs associés à cette instance.
void add(EventObserverBase *x)
Ajoute l'observateur x.
Observateur d'évènements.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-