Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IItemFamilySerializeStep.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* IItemFamilySerializeStep.h (C) 2000-2025 */
9/* */
10/* Interface d'une étape de la sérialisation des familles d'entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IITEMFAMILYSERIALIZESTEP_H
13#define ARCANE_CORE_IITEMFAMILYSERIALIZESTEP_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Interface d'une étape de la sérialisation des familles d'entités.
29 *
30 * Cette interface est utilisée par IItemFamilyExchanger pour sérialiser
31 * et désérialiser des informations. La sérialisation se fait par échange
32 * de messages et il y a un message par rang avec lequel on communique.
33 *
34 * Le pseudo-code d'appel est le suivant:
35 \code
36 * IItemFamilyExchanger* exchanger = ...;
37 * IItemFamilySerializeStep* step = ...;
38 * exchanger->computeExchangeInfos();
39 * step->initialize();
40 * // Some exchanger action
41 * ...
42 * step->notifyAction(AC_BeginPrepareSend);
43 * // Set serialize mode to ISerializer::ModeReserve
44 * for( Integer i=0; i<nb_message; ++i )
45 * step->serialize(i);
46 * // Set serialize mode to ISerializer::ModePut
47 * for( Integer i=0; i<nb_message; ++i )
48 * step->serialize(i);
49 * step->notifyAction(AC_EndPrepareSend);
50 * exchanger->processExchange();
51 * step->notifyAction(AC_BeginReceive);
52 * // Set serialize mode to ISerializer::ModeGet
53 * for( Integer i=0; i<nb_message; ++i )
54 * step->serialize(i);
55 * step->notifyAction(AC_EndReceive);
56 * step->finalize();
57 \endcode
58 *
59 * La méthode serialize() est appelée pour chaque rang avec lequel on
60 * communique.
61 *
62 * L'étape est appelé lors de la phase de sérialisation spécifiée par phase()
63 * comme spécifié dans la documentation de IItemFamilyExchanger.
64 *
65 * Pour la phase spécifiée, l'ordre d'appel est le suivant:
66 \code
67 * IItemFamilySerializeStep* step = ...;
68 * ISerializer* sbuf = ...;
69 * sbuf->setMode(ISerializer::ModeReserve)
70 * step->beginSerialize(sbuf->mode())
71 \endcode
72 */
73class ARCANE_CORE_EXPORT IItemFamilySerializeStep
74{
75 public:
76
77 //! Phase de la sérialisation
78 enum ePhase
79 {
80 PH_Item,
81 PH_Group,
82 PH_Variable
83 };
84 //! Action en cours de la sérialisation
85 enum class eAction
86 {
87 //! Début de la préparation de l'envoie.
89 //! Fin de la préparation de l'envoie.
91 //! Début de la réception des données.
93 //! Fin de la réception des données.
95 };
96
97 public:
98
99 class NotifyActionArgs
100 {
101 public:
102
103 NotifyActionArgs(eAction aaction, Integer nb_message)
104 : m_action(aaction)
105 , m_nb_message(nb_message)
106 {}
107
108 public:
109
110 eAction action() const { return m_action; }
111 //! Nombre de messages de sérialisation
112 Integer nbMessage() const { return m_nb_message; }
113
114 private:
115
116 eAction m_action;
117 Integer m_nb_message;
118 };
119
120 public:
121
122 virtual ~IItemFamilySerializeStep() = default;
123
124 public:
125
126 //! Initialise l'instance avant le début des échanges.
127 virtual void initialize() = 0;
128
129 //! Notifie l'instance qu'on entre dans une certaine phase de l'échange.
130 virtual void notifyAction(const NotifyActionArgs& args) = 0;
131
132 /*!
133 * \brief Sérialise dans/depuis \a buf.
134 *
135 * \a args.rank() contient le rang du sous-domaine avec lequel on
136 * communique. \a args.messageIndex() l'index numéro du message et
137 * \a args.nbMessageIndex() le nombre de message qui seront envoyés.
138 *
139 * En sérialisation, il s'agit des indices locaux des entités envoyées au
140 * rang \a rank(). En désérialisation, il s'agit des indices locaux
141 * recues par le rang \a rank().
142 */
143 virtual void serialize(const ItemFamilySerializeArgs& args) = 0;
144
145 //! Effectue les traitements de fin d'échange.
146 virtual void finalize() = 0;
147
148 //! Phase de la sérialisation où cette instance intervient.
149 virtual ePhase phase() const = 0;
150
151 //! Famille associée
152 virtual IItemFamily* family() const = 0;
153};
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157/*!
158 * \brief Fabrique pour créer une étape de la sérialisation des
159 * familles d'entités.
160 */
161class ARCANE_CORE_EXPORT IItemFamilySerializeStepFactory
162{
163 public:
164
165 virtual ~IItemFamilySerializeStepFactory() = default;
166
167 public:
168
169 /*!
170 * \brief Créé une étape pour la famille \a family.
171 *
172 * Peut retourner nullptr auquel cas aucune étape n'est ajoutée pour cette
173 * fabrique.
174 */
176};
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181} // namespace Arcane
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185
186#endif
187
Déclarations des types généraux de Arcane.
Fabrique pour créer une étape de la sérialisation des familles d'entités.
virtual IItemFamilySerializeStep * createStep(IItemFamily *family)=0
Créé une étape pour la famille family.
Integer nbMessage() const
Nombre de messages de sérialisation.
Interface d'une étape de la sérialisation des familles d'entités.
virtual void initialize()=0
Initialise l'instance avant le début des échanges.
virtual IItemFamily * family() const =0
Famille associée.
virtual void finalize()=0
Effectue les traitements de fin d'échange.
virtual void notifyAction(const NotifyActionArgs &args)=0
Notifie l'instance qu'on entre dans une certaine phase de l'échange.
virtual ePhase phase() const =0
Phase de la sérialisation où cette instance intervient.
eAction
Action en cours de la sérialisation.
@ AC_EndPrepareSend
Fin de la préparation de l'envoie.
@ AC_BeginPrepareSend
Début de la préparation de l'envoie.
@ AC_BeginReceive
Début de la réception des données.
@ AC_EndReceive
Fin de la réception des données.
virtual void serialize(const ItemFamilySerializeArgs &args)=0
Sérialise dans/depuis buf.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Arguments des callbacks de sérialisation des familles d'entités.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.