Arcane  v3.15.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ISerializedData.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/* ISerializedData.h (C) 2000-2022 */
9/* */
10/* Interface d'une donnée sérialisée. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ISERIALIZEDDATA_H
13#define ARCANE_ISERIALIZEDDATA_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \internal
29 * \brief Interface d'une donnée sérialisée.
30 *
31 * Une donnée (IData) est sérialisée en une instance de cette classe.
32 *
33 * Quel que soit le type de la donnée, le type sérialisé est obligatoirement
34 * un type de base parmi les suivants: DT_Byte, DT_Int16, DT_Int32, DT_Int64, DT_Real.
35 *
36 * Une instance de cette classe n'est valable que tant que la donnée
37 * de référence n'est pas modifiée.
38 *
39 * Pour sérialiser une donnée \a data en écriture:
40 * \code
41 * IData* data = ...;
42 * ISerializedData* sdata = data->createSerializedData();
43 * // sdata->constBytes() contient la donnée sérialisée.
44 * Span<const Byte> buf(sdata->constBytes());
45 * std::cout.write(reinterpret_cast<const char*>(buf.data()),buf.size());
46 * \endcode
47 *
48 * Pour sérialiser une donnée \a data en lecture:
49 * \code
50 * IData* data = ...
51 * // Créé une instance d'un ISerializedData.
52 * Ref<ISerializedData> sdata = arcaneCreateSerializedDataRef(...);
53 * data->allocateBufferForSerializedData(sdata);
54 * // Remplit sdata->writableBytes() à partir de votre source
55 * Span<Byte> buf(sdata->writableBytes());
56 * std::cin.read(reinterpret_cast<char*>(buf.data()),buf.size());
57 * // Assigne la valeur à \a data
58 * data->assignSerializedData(sdata);
59 * \endcode
60 */
61class ARCANE_CORE_EXPORT ISerializedData
62{
64
65 public:
66
67 //! Libère les ressources
68 virtual ~ISerializedData() = default;
69
70 public:
71
72 //! Type de la donnée
73 virtual eDataType baseDataType() const = 0;
74
75 //! Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, ...
76 virtual Integer nbDimension() const = 0;
77
78 //! Nombre d'éléments
79 virtual Int64 nbElement() const = 0;
80
81 //! Nombre d'éléments du type de base
82 virtual Int64 nbBaseElement() const = 0;
83
84 //! Indique s'il s'agit d'un tableau multi-taille. (pertinent uniquement si nbDimension()>1)
85 virtual bool isMultiSize() const = 0;
86
87 //! Indique le nombre d'octets qu'il faut allouer pour stocker ou lire les données
88 virtual Int64 memorySize() const = 0;
89
90 //! Tableau contenant le nombre d'éléments pour chaque dimension
91 virtual Int64ConstArrayView extents() const = 0;
92
93 //! Forme du tableau associé aux données
94 virtual ArrayShape shape() const = 0;
95
96 //! Valeurs sérialisées.
97 virtual Span<const Byte> constBytes() const = 0;
98
99 /*!
100 * \brief Vue sur les valeurs sérialisées
101 *
102 * \warning Cette méthode renvoie une vue non vide uniquement si on
103 * a appelé allocateMemory() ou setWritableBytes(Span<Byte>) avant.
104 */
106
107 /*!
108 * \brief Positionne les valeurs de sérialisation.
109 *
110 * La vue \a bytes doit rester valide tant que cette instance est utilisée.
111 */
112 virtual void setWritableBytes(Span<Byte> bytes) = 0;
113
114 /*!
115 * \brief Positionne les valeurs de sérialisation pour la lecture
116 *
117 * La vue \a bytes doit rester valide tant que cette instance est utilisée.
118 */
119 virtual void setConstBytes(Span<const Byte> bytes) = 0;
120
121 /*!
122 * \brief Alloue un tableaux pour contenir les éléments sérialisés.
123 *
124 * Après appel à cette méthode, il est possible de récupérer une
125 * vue sur les valeurs sérialisées via writableBytes() ou constBytes().
126 */
127 virtual void allocateMemory(Int64 size) = 0;
128
129 public:
130
131 /*!
132 * \brief Serialize en lecture ou écriture la donnée
133 */
134 virtual void serialize(ISerializer* buffer) = 0;
135
136 /*!
137 * \brief Serialize en lecture la donnée
138 */
139 virtual void serialize(ISerializer* buffer) const = 0;
140
141 public:
142
143 /*!
144 * \brief Calcul une clé de hashage sur cette donnée.
145 *
146 * La clé est ajoutée dans \a output. La longueur de la clé dépend
147 * de l'algorithme utilisé.
148 */
149 virtual void computeHash(IHashAlgorithm* algo, ByteArray& output) const = 0;
150
151 public:
152
153 /*!
154 * \brief Valeurs sérialisées.
155 * \deprecated Utiliser bytes() à la place.
156 */
157 ARCANE_DEPRECATED_2018_R("Use method 'writableBytes()' or 'constBytes()' instead")
158 virtual ByteConstArrayView buffer() const = 0;
159
160 /*!
161 * \brief Valeurs sérialisées.
162 * \deprecated Utiliser bytes() à la place.
163 */
164 ARCANE_DEPRECATED_2018_R("Use method 'writableBytes()' or 'constBytes()' instead")
165 virtual ByteArrayView buffer() = 0;
166
167 //! Valeurs sérialisées.
168 ARCCORE_DEPRECATED_2021("Use method 'writableBytes()' or 'constBytes()' instead")
169 virtual Span<const Byte> bytes() const = 0;
170
171 /*!
172 * \brief Positionne les valeurs de sérialisation.
173 *
174 * Le tableau \a buffer ne doit pas être modifié
175 * tant que cette instance est utilisée.
176 * \deprecated Utiliser setBytes() à la place.
177 */
178 ARCCORE_DEPRECATED_2021("Use method 'setWritableBytes()' instead")
179 virtual void setBuffer(ByteArrayView buffer) = 0;
180
181 /*!
182 * \brief Positionne les valeurs de sérialisation.
183 *
184 * Le tableau \a buffer ne doit pas être modifié
185 * tant que cette instance est utilisée.
186 * \deprecated Utiliser setBytes() à la place.
187 */
188 ARCCORE_DEPRECATED_2021("Use method 'setConstBytes()' instead")
189 virtual void setBuffer(ByteConstArrayView buffer) = 0;
190
191 /*!
192 * \brief Positionne les valeurs de sérialisation.
193 *
194 * Le tableau \a bytes ne doit pas être modifié
195 * tant que cette instance est utilisée.
196 */
197 ARCCORE_DEPRECATED_2021("Use method 'setWritableBytes()' instead")
198 virtual void setBytes(Span<Byte> bytes) = 0;
199
200 /*!
201 * \brief Positionne les valeurs de sérialisation.
202 *
203 * Le tableau \a bytes ne doit pas être modifié
204 * tant que cette instance est utilisée.
205 */
206 ARCCORE_DEPRECATED_2021("Use method 'setConstBytes()' instead")
207 virtual void setBytes(Span<const Byte> bytes) = 0;
208
209 /*!
210 * \brief Valeurs sérialisées
211 *
212 * \warning Cette méthode renvoie une vue non vide uniquement si on
213 * a appelé setBytes(Span<Byte>) ou allocateMemory().
214 */
215 ARCCORE_DEPRECATED_2021("Use method 'writableBytes()' or 'constBytes()' instead")
216 virtual Span<Byte> bytes() = 0;
217};
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221/*!
222 * \brief Créé des données sérialisées.
223 *
224 * les tableaux \a dimensions et \a values ne sont pas dupliqués et ne doivent
225 * pas être modifiés tant que l'objet sérialisé est utilisé.
226 *
227 * Le type \a data_type doit être un type parmi \a DT_Byte, \a DT_Int16, \a DT_Int32,
228 * \a DT_Int64 ou DT_Real.
229 */
230extern "C++" ARCANE_CORE_EXPORT
232arcaneCreateSerializedDataRef(eDataType data_type, Int64 memory_size,
233 Integer nb_dim, Int64 nb_element, Int64 nb_base_element,
234 bool is_multi_size, Int64ConstArrayView dimensions);
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
238/*!
239 * \brief Créé des données sérialisées.
240 *
241 * les tableaux \a dimensions et \a values ne sont pas dupliqués et ne doivent
242 * pas être modifiés tant que l'objet sérialisé est utilisé.
243 *
244 * Le type \a data_type doit être un type parmi \a DT_Byte, \a DT_Int16, \a DT_Int32,
245 * \a DT_Int64 ou DT_Real.
246 */
247extern "C++" ARCANE_CORE_EXPORT
249arcaneCreateSerializedDataRef(eDataType data_type, Int64 memory_size,
250 Integer nb_dim, Int64 nb_element, Int64 nb_base_element,
251 bool is_multi_size, Int64ConstArrayView dimensions,
252 const ArrayShape& shape);
253
254/*---------------------------------------------------------------------------*/
255/*---------------------------------------------------------------------------*/
256/*!
257 * \brief Créé des données sérialisées.
258 *
259 * la donnée sérialisée est vide. Elle ne pourra être utilisée qu'après un
260 * appel à ISerializedData::serialize() en mode ISerializer::ModePut.
261 */
262extern "C++" ARCANE_CORE_EXPORT
264arcaneCreateEmptySerializedDataRef();
265
266/*---------------------------------------------------------------------------*/
267/*---------------------------------------------------------------------------*/
268
269} // End namespace Arcane
270
271/*---------------------------------------------------------------------------*/
272/*---------------------------------------------------------------------------*/
273
274#endif
275
#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS()
Macro pour déclarer les méthodes virtuelles gérant les compteurs de référence.
Forme d'un tableau.
Definition ArrayShape.h:40
Interface d'un algorithme de hashage.
virtual eDataType baseDataType() const =0
Type de la donnée.
virtual ArrayShape shape() const =0
Forme du tableau associé aux données.
virtual Integer nbDimension() const =0
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, ...
virtual Int64 memorySize() const =0
Indique le nombre d'octets qu'il faut allouer pour stocker ou lire les données.
virtual void allocateMemory(Int64 size)=0
Alloue un tableaux pour contenir les éléments sérialisés.
virtual void setWritableBytes(Span< Byte > bytes)=0
Positionne les valeurs de sérialisation.
virtual void setConstBytes(Span< const Byte > bytes)=0
Positionne les valeurs de sérialisation pour la lecture.
virtual void serialize(ISerializer *buffer) const =0
Serialize en lecture la donnée.
virtual void serialize(ISerializer *buffer)=0
Serialize en lecture ou écriture la donnée.
ARCANE_DEPRECATED_2018_R("Use method 'writableBytes()' or 'constBytes()' instead") virtual ByteConstArrayView buffer() const =0
Valeurs sérialisées.
virtual void computeHash(IHashAlgorithm *algo, ByteArray &output) const =0
Calcul une clé de hashage sur cette donnée.
virtual Span< Byte > writableBytes()=0
Vue sur les valeurs sérialisées.
virtual ~ISerializedData()=default
Libère les ressources.
virtual Int64 nbBaseElement() const =0
Nombre d'éléments du type de base.
virtual Int64ConstArrayView extents() const =0
Tableau contenant le nombre d'éléments pour chaque dimension.
virtual Int64 nbElement() const =0
Nombre d'éléments.
virtual Span< const Byte > constBytes() const =0
Valeurs sérialisées.
virtual bool isMultiSize() const =0
Indique s'il s'agit d'un tableau multi-taille. (pertinent uniquement si nbDimension()>1)
Vue modifiable d'un tableau d'un type T.
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
Référence à une instance.
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eDataType
Type d'une donnée.
Definition DataTypes.h:39