Arcane  v3.14.10.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.
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 -*-
unsigned char Byte
Type d'un octet.
Definition UtilsTypes.h:142
eDataType
Type d'une donnée.
Definition DataTypes.h:39