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