Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
utils/IObservable.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* IObservable.h (C) 2000-2021 */
9/* */
10/* Interface d'un observable. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_IOBSERVABLE_H
13#define ARCANE_UTILS_IOBSERVABLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class IObserver;
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \ingroup Core
34 * \brief Interface d'un observable.
35 *
36 * Un observable est un objet qui maintient une liste d'observateurs
37 * (IObserver) et qui permet de les notifier d'un évènement par l'intermédiaire
38 * de la méthode notifyAllObserver().
39 *
40 * Un observateur est ajouté à la liste des observateurs par la méthode
41 * attachObserver() et supprimé de cette même liste par detachObserver().
42 *
43 * La liste des observateurs attachés est ordonnée et les notifications se font
44 * dans l'ordre des éléments de la liste. Si un même observateur est présent
45 * plusieurs fois, il sera notifier autant de fois qu'il est présent.
46 *
47 * \warning Il est indispensable de supprimer, via l'appel à detachAllObservers()
48 * les observeurs associés à un observable avant de le détruire.
49 *
50 * \sa IObserver
51 */
52class ARCANE_UTILS_EXPORT IObservable
53{
54 public:
55
56 virtual ~IObservable() {} //!< Libère les ressources
57
58 public:
59
60 static IObservable* createDefault();
61
62 public:
63
64 /*!
65 * \brief Détruit l'observable.
66 * Cet appel détruit l'instance (via delete this). Elle
67 * ne doit donc plus être utilisé par la suite.
68 *
69 * \deprecated Utiliser detachAllObservers() puis l'opérateur delete ensuite.
70 */
71 virtual ARCANE_DEPRECATED_220 void destroy() =0;
72
73 /*!
74 * \brief Attache l'observateur \a obs à cette observable.
75 *
76 * Il est possible d'attacher un observateur plus d'une fois.
77 */
78 virtual void attachObserver(IObserver* obs) =0;
79
80 /*!
81 * \brief Détache l'observateur \a obs de cette observable.
82 *
83 * Si l'obervateur \a obs n'est pas présent, rien n'est fait. S'il est
84 * présent plusieurs fois, c'est la dernière occurence qui est effacé.
85 */
86 virtual void detachObserver(IObserver* obs) =0;
87
88 /*!
89 * \brief Notifie tous les observateurs.
90 *
91 * Pour chaque observateur attaché, appelle IObserver::observerUpdate().
92 */
93 virtual void notifyAllObservers() =0;
94
95 //! Vrai si des observers sont attachées à cette observable.
96 virtual bool hasObservers() const =0;
97
98 /*!
99 * \brief Vrai si l'observable est détruit et ne doit plus être utilisé.
100 *
101 */
102 virtual ARCANE_DEPRECATED_220 bool isDestroyed() const =0;
103
104 /*!
105 * \brief Détache tous les observeurs associés à cette instance.
106 */
107 virtual void detachAllObservers() =0;
108};
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112
113} // End namespace Arcane
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
117
118#endif
119
Fichier de configuration d'Arcane.
Interface d'un observable.
virtual ARCANE_DEPRECATED_220 bool isDestroyed() const =0
Vrai si l'observable est détruit et ne doit plus être utilisé.
virtual void detachAllObservers()=0
Détache tous les observeurs associés à cette instance.
virtual void attachObserver(IObserver *obs)=0
Attache l'observateur obs à cette observable.
virtual ARCANE_DEPRECATED_220 void destroy()=0
Détruit l'observable. Cet appel détruit l'instance (via delete this). Elle ne doit donc plus être uti...
virtual void notifyAllObservers()=0
Notifie tous les observateurs.
virtual bool hasObservers() const =0
Vrai si des observers sont attachées à cette observable.
virtual void detachObserver(IObserver *obs)=0
Détache l'observateur obs de cette observable.
virtual ~IObservable()
Libère les ressources.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-