Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IBackwardMng.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/* IBackwardMng.h (C) 2000-2016 */
9/* */
10/* Interface gérant les stratégies de retour-arrière. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IBACKWARDMNG_H
13#define ARCANE_IBACKWARDMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22ARCANE_BEGIN_NAMESPACE
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29/*!
30 * \internal
31 * \brief Interface gérant les stratégies de retour-arrière.
32 *
33 * Cette interface est utilisée par le ITimeLoopMng pour gérer les
34 * retour-arrière. Le principe du retour-arrière est de sauvegarder à une
35 * itération donnée les valeurs des variables pour pouvoir revenir à
36 * cette itération, par exemple en cas de problème dans le calcul.
37 *
38 * Il est possible de positionner une instance spécifique via
39 * ITimeLoopMng::setBackwardMng();
40 *
41 * L'enchainement des opérations, effectué à la fin de chaque itération,
42 * est géré par l'instance de ITimeLoopMng. Il est comme suit:
43 \code
44 * IBackwardMng bw = ...;
45 * bw->beginAction();
46 * if (bw->checkAndApplyRestore()){
47 * // Exécution des points d'entrée de restoration.
48 * }
49 * bw->checkAndApplySave();
50 * bw->endAction();
51 \endcode
52 *
53 */
54class ARCANE_CORE_EXPORT IBackwardMng
55{
56 public:
57
58 // Actions à entreprendre
60 {
61 //! Sauvegarde
63 //! Restauration
64 Restore
65 };
66
67 public:
68
69 virtual ~IBackwardMng() {}
70
71 public:
72
73 //! Initialisation du manager de retour en arrière
74 virtual void init() = 0;
75
76 //! Indique qu'on commence les actions de sauvegarde/restauration sont terminées
77 virtual void beginAction() = 0;
78
79 /*!
80 * \brief Vérifie et applique la restauration si nécessaire.
81 * \retval true si une restauration est effectuée.
82 */
83 virtual bool checkAndApplyRestore() = 0;
84
85 /*!
86 * \brief Vérifie et applique la sauvegarde des variables si nécessaire.
87 * Si \a is_forced est vrai, force la sauvegarde.
88 * \retval true si une sauvegarde est effectuée.
89 */
90 virtual bool checkAndApplySave(bool is_forced) =0;
91
92 //! Indique que les actions de sauvegarde/restauration sont terminées
93 virtual void endAction() = 0;
94
95 // Période de sauvegarde
96 virtual void setSavePeriod(Integer n) = 0;
97
98 // Récupère la période de sauvegarde
99 virtual Integer savePeriod() const = 0;
100
101 /*!
102 * \brief Signale qu'on souhaite effectué un retour arrière.
103 *
104 * Le retour arrière aura lieu lors de l'appel à checkAndApplyRestore().
105 *
106 * En général il ne faut pas appeler directement cette méthode mais
107 * plutôt ITimeLoopMng::goBackward().
108 *
109 * Depuis l'appel à cette méthode jusqu'à l'action effective du
110 * retour-arrière lors de l'appel à checkAndApplyRestore(),
111 * isBackwardEnabled() retourne \a true.
112 */
113 virtual void goBackward() = 0;
114
115 /*!
116 * \brief Indique si les sauvegardes de retour-arrière sont vérouillées.
117 *
118 * isLocked() est vrai s'il n'est pas possible de faire une
119 * sauvegarde. C'est le cas par exemple lorsqu'on a effectué à l'itération
120 * \a M un retour arrière vers l'itération N et qu'on n'est pas encore
121 * revenu à l'itération \a M.
122 */
123 virtual bool isLocked() const = 0;
124
125 /*!
126 * \brief Indique si un retour-arrière est programmé.
127 * \sa goBackward().
128 */
129 virtual bool isBackwardEnabled() const = 0;
130
131 /*!
132 * \brief Supprime les ressources associées au retour-arrière.
133 *
134 * Cette méthode est appelé pour désallouer les ressources
135 * comme les sauvegardes des variables. Cette méthode est appelée
136 * entre autre avant un équilibrage de charge puisqu'il ne sera
137 * pas possible de faire un retour-arrière avant cet équilibrage.
138 */
139 virtual void clear() = 0;
140};
141
142/*---------------------------------------------------------------------------*/
143/*---------------------------------------------------------------------------*/
144
145ARCANE_END_NAMESPACE
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149
150#endif
151
virtual void init()=0
Initialisation du manager de retour en arrière.
virtual void clear()=0
Supprime les ressources associées au retour-arrière.
virtual bool checkAndApplySave(bool is_forced)=0
Vérifie et applique la sauvegarde des variables si nécessaire. Si is_forced est vrai,...
virtual void endAction()=0
Indique que les actions de sauvegarde/restauration sont terminées.
virtual void goBackward()=0
Signale qu'on souhaite effectué un retour arrière.
virtual bool isLocked() const =0
Indique si les sauvegardes de retour-arrière sont vérouillées.
virtual bool isBackwardEnabled() const =0
Indique si un retour-arrière est programmé.
virtual void beginAction()=0
Indique qu'on commence les actions de sauvegarde/restauration sont terminées.
virtual bool checkAndApplyRestore()=0
Vérifie et applique la restauration si nécessaire.