Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IData.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/* IData.h (C) 2000-2023 */
9/* */
10/* Interface d'une donnée. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IDATA_H
13#define ARCANE_IDATA_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Interface d'une donnée.
29 *
30 * Cette classe gère la mémoire associée à une variable.
31 */
32class ARCANE_CORE_EXPORT IData
33{
35
36 public:
37
38 virtual ~IData() = default;
39
40 public:
41
42 //! Type de la donnée
43 virtual eDataType dataType() const = 0;
44
45 //! Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, 2 pour un tableau bi-dim.
46 virtual Integer dimension() const = 0;
47
48 //! Tag multiple. 0 si non multiple, 1 si multiple, 2 si multiple pour les variable MultiArray (obsolète)
49 virtual Integer multiTag() const = 0;
50
51 //! Clone la donnée. L'instance créée doit être détruite par l'opérateur 'delete'
52 ARCCORE_DEPRECATED_2020("Use cloneRef() instead")
53 virtual IData* clone() = 0;
54
55 //! Clone la donnée mais sans éléments. L'instance créée doit être détruite par l'opérateur 'delete'
56 ARCCORE_DEPRECATED_2020("Use cloneEmptyRef() instead")
57 virtual IData* cloneEmpty() = 0;
58
59 //! Clone la donnée
60 virtual Ref<IData> cloneRef() = 0;
61
62 //! Clone la donnée mais sans éléments.
63 virtual Ref<IData> cloneEmptyRef() = 0;
64
65 //! Informations sur le type de conteneur de la donnée
66 virtual DataStorageTypeInfo storageTypeInfo() const = 0;
67
68 //! Sérialise la donnée en appliquant l'opération \a operation
69 virtual void serialize(ISerializer* sbuf, IDataOperation* operation) = 0;
70
71 /*!
72 * \brief Redimensionne la donnée.
73 *
74 * Cette opération n'a de sens que pour les données de dimension 1 ou plus.
75 * Si le nouveau nombre d'éléments est supérieur à l'ancien, les valeurs ajoutées à
76 * la donnée ne sont pas initialisées.
77 */
78 virtual void resize(Integer new_size) = 0;
79
80 /*!
81 * \brief Serialise la donnée pour les indices \a ids.
82 *
83 * Cette opération n'a de sens que pour les données de dimension 1 ou plus.
84 */
85 virtual void serialize(ISerializer* sbuf, Int32ConstArrayView ids, IDataOperation* operation) = 0;
86
87 //! Remplit la donnée avec sa valeur par défaut.
88 virtual void fillDefault() = 0;
89
90 //! Positionne le nom de la donnée (interne)
91 virtual void setName(const String& name) = 0;
92
93 /*!
94 * \brief Sérialise la donnée.
95 *
96 * Pour des raisons de performances, l'instance retournée peut faire
97 * directement référence à la zone mémoire de cette donnée. Par
98 * conséquent, elle n'est valide que tant que cette donnée n'est
99 * pas modifiée. Si on souhaite modifier cette instance, il faut
100 * d'abord la cloner (via IData::cloneRef()) puis sérialiser la donnée clonée.
101 *
102 * Si \a use_basic_type est vrai, la donnée est sérialisée pour un type
103 * de base, à savoir #DT_Byte, #DT_Int16, #DT_Int32, #DT_Int64 ou #DT_Real. Sinon,
104 * le type peut être un POD, à savoir #DT_Byte, #DT_Int16, #DT_Int32, #DT_Int64,
105 * #DT_Real, #DT_Real2, #DT_Real3, #DT_Real2x2, #DT_Real3x3.
106 */
107 virtual Ref<ISerializedData> createSerializedDataRef(bool use_basic_type) const = 0;
108
109 /*!
110 * \brief Assigne à la donnée les valeurs sérialisées \a sdata.
111 *
112 * Le tampon contenant les valeurs de sérialisation doit avoir
113 * être alloué par appel à allocateBufferForSerializedData().
114 */
115 virtual void assignSerializedData(const ISerializedData* sdata) = 0;
116
117 /*!
118 * \brief Alloue la mémoire pour lire les valeurs sérialisées \a sdata.
119 *
120 * Cette méthode positionne sdata->setBuffer() qui contiendra la
121 * mémoire nécessaire pour lire les données sérialisées.
122 */
123 virtual void allocateBufferForSerializedData(ISerializedData* sdata) = 0;
124
125 /*!
126 * \brief Copie la donnée \a data dans l'instance courante.
127 *
128 * La donnée \a data doit être du même type que l'instance.
129 */
130 virtual void copy(const IData* data) = 0;
131
132 /*!
133 * \brief Échange les valeurs de \a data avec celles de l'instance.
134 *
135 * La donnée \a IData doit être du même type que l'instance. Seules
136 * les valeurs sont échangés et les autres propriétés éventuelles
137 * (telles que le nom par exemple) ne sont pas modifiées.
138 */
139 virtual void swapValues(IData* data) = 0;
140
141 /*!
142 * \brief Calcul une clé de hashage sur cette donnée.
143 *
144 * La clé est ajoutée dans \a output. La longueur de la clé dépend
145 * de l'algorithme utilisé.
146 */
147 virtual void computeHash(IHashAlgorithm* algo, ByteArray& output) const = 0;
148
149 /*!
150 * \brief Forme du tableau pour une donnée 1D ou 2D.
151 *
152 * La forme n'est prise en compte que pour les dimensions supérieures à 1.
153 * Pour une donnée 1D, la forme est donc par défaut {1}. Pour un tableau 2D,
154 * la forme vaut par défaut {dim2_size}. Il est possible de changer le rang
155 * de la forme et ses valeurs tant que shape().totalNbElement()==dim2_size.
156 * Par exemple si le nombre de valeurs dim2_size vaut 12, alors il est
157 * possible d'avoir { 12 }, { 6, 2 } ou { 3, 2, 2 } comme forme.
158 *
159 * Les valeurs ne sont pas conservés lors d'une reprise et il faut donc
160 * repositionner la forme dans ce cas. C'est à l'utilisateur de s'assurer
161 * que la forme est homogène entre les sous-domaines.
162 */
163 virtual ArrayShape shape() const = 0;
164
165 //! Positionne la forme du tableau.
166 virtual void setShape(const ArrayShape& new_shape) = 0;
167
168 public:
169
170 //! Positionne les informations sur l'allocation
171 virtual void setAllocationInfo(const DataAllocationInfo& v) = 0;
172
173 //! Informations sur l'allocation
174 virtual DataAllocationInfo allocationInfo() const = 0;
175
176 public:
177
178 //! Applique le visiteur à la donnée
179 virtual void visit(IDataVisitor* visitor) = 0;
180
181 /*!
182 * \brief Applique le visiteur à la donnée.
183 *
184 * Si la donnée n'est pas scalaire, une exception
185 * NotSupportedException est lancée.
186 */
187 virtual void visitScalar(IScalarDataVisitor* visitor) = 0;
188
189 /*!
190 * \brief Applique le visiteur à la donnée.
191 *
192 * Si la donnée n'est pas un tableau 1D, une exception
193 * NotSupportedException est lancée.
194 */
195 virtual void visitArray(IArrayDataVisitor* visitor) = 0;
196
197 /*!
198 * \brief Applique le visiteur à la donnée.
199 *
200 * Si la donnée n'est pas un tableau 2D, une exception
201 * NotSupportedException est lancée.
202 */
203 virtual void visitArray2(IArray2DataVisitor* visitor) = 0;
204
205 /*!
206 * \brief Applique le visiteur à la donnée.
207 *
208 * Si la donnée n'est pas un tableau 2D, une exception
209 * NotSupportedException est lancée.
210 *
211 * \deprecated Ce visiteur est obsolète car il n'y a pas plus
212 * d'implémentation de IMultiArray2.
213 */
214 virtual void visitMultiArray2(IMultiArray2DataVisitor* visitor);
215
216 //! \internal
217 virtual IDataInternal* _commonInternal() = 0;
218};
219
220/*---------------------------------------------------------------------------*/
221/*---------------------------------------------------------------------------*/
222/*!
223 * \brief Interface d'une donnée scalaire.
224 */
226: public IData
227{
228 public:
229 virtual void visit(IDataVisitor* visitor) = 0;
230 //! Applique le visiteur à la donnée.
231 virtual void visit(IScalarDataVisitor* visitor) = 0;
232};
233
234/*---------------------------------------------------------------------------*/
235/*---------------------------------------------------------------------------*/
236/*!
237 * \internal
238 * \brief Interface d'une donnée scalaire d'un type \a T
239 */
240template <class DataType>
242: public IScalarData
243{
244 public:
245 typedef IScalarDataT<DataType> ThatClass;
246
247 public:
248 //! Valeur de la donnée
249 virtual DataType& value() = 0;
250
251 //! Valeur de la donnée
252 virtual const DataType& value() const = 0;
253
254 //! Clone la donnée
255 ARCCORE_DEPRECATED_2020("Use cloneTrueRef() instead")
256 virtual ThatClass* cloneTrue() = 0;
257
258 //! Clone la donnée mais sans éléments.
259 ARCCORE_DEPRECATED_2020("Use cloneTrueEmpty() instead")
260 virtual ThatClass* cloneTrueEmpty() = 0;
261
262 //! Clone la donnée
263 virtual Ref<ThatClass> cloneTrueRef() = 0;
264
265 //! Clone la donnée mais sans éléments.
266 virtual Ref<ThatClass> cloneTrueEmptyRef() = 0;
267};
268
269/*---------------------------------------------------------------------------*/
270/*---------------------------------------------------------------------------*/
271/*!
272 * \brief Interface d'une donnée tableau 1D.
273 */
275: public IData
276{
277 public:
278 virtual void visit(IDataVisitor* visitor) = 0;
279 //! Applique le visiteur à la donnée.
280 virtual void visit(IArrayDataVisitor* visitor) = 0;
281};
282
283/*---------------------------------------------------------------------------*/
284/*---------------------------------------------------------------------------*/
285/*!
286 * \internal
287 * \brief Interface d'une donnée tableau d'un type \a T
288 */
289template <class DataType>
291: public IArrayData
292{
293 public:
294
295 typedef IArrayDataT<DataType> ThatClass;
296
297 public:
298
299 //! Valeur de la donnée
300 ARCCORE_DEPRECATED_2021("Use view() instead.")
301 virtual Array<DataType>& value() = 0;
302
303 //! Valeur constante de la donnée
304 ARCCORE_DEPRECATED_2021("Use view() instead.")
305 virtual const Array<DataType>& value() const = 0;
306
307 public:
308
309 //! Vue constante sur la donnée
310 virtual ConstArrayView<DataType> view() const = 0;
311
312 //! Vue sur la donnée
313 virtual ArrayView<DataType> view() = 0;
314
315 //! Clone la donnée
316 ARCCORE_DEPRECATED_2020("Use cloneTrueRef() instead")
317 virtual ThatClass* cloneTrue() = 0;
318
319 //! Clone la donnée mais sans éléments.
320 ARCCORE_DEPRECATED_2020("Use cloneTrueEmptyRef() instead")
321 virtual ThatClass* cloneTrueEmpty() = 0;
322
323 //! Clone la donnée
324 virtual Ref<ThatClass> cloneTrueRef() = 0;
325
326 //! Clone la donnée mais sans éléments.
327 virtual Ref<ThatClass> cloneTrueEmptyRef() = 0;
328
329 //! \internal
330 virtual IArrayDataInternalT<DataType>* _internal() = 0;
331};
332
333/*---------------------------------------------------------------------------*/
334/*---------------------------------------------------------------------------*/
335/*!
336 * \brief Interface d'une donnée tableau 2D.
337 */
339: public IData
340{
341};
342
343/*---------------------------------------------------------------------------*/
344/*---------------------------------------------------------------------------*/
345/*!
346 * \brief Interface d'une donnée tableau multi 2D.
347 * \deprecated Cette interface n'est plus utilisée.
348 */
350: public IData
351{
352};
353
354/*---------------------------------------------------------------------------*/
355/*---------------------------------------------------------------------------*/
356/*!
357 * \internal
358 * \brief Interface d'une donnée tableau bi-dimensionnel d'un type \a T
359 */
360template <class DataType>
362: public IArray2Data
363{
364 public:
365
366 typedef IArray2DataT<DataType> ThatClass;
367
368 //! Valeur de la donnée
369 ARCCORE_DEPRECATED_2021("Use view() instead.")
370 virtual Array2<DataType>& value() = 0;
371
372 //! Valeur de la donnée
373 ARCCORE_DEPRECATED_2021("Use view() instead.")
374 virtual const Array2<DataType>& value() const = 0;
375
376 public:
377
378 //! Vue constante sur la donnée
379 virtual ConstArray2View<DataType> view() const = 0;
380
381 //! Vue sur la donnée
382 virtual Array2View<DataType> view() = 0;
383
384 //! Clone la donnée
385 ARCCORE_DEPRECATED_2020("Use cloneTrueRef() instead")
386 virtual ThatClass* cloneTrue() = 0;
387
388 //! Clone la donnée mais sans éléments.
389 ARCCORE_DEPRECATED_2020("Use cloneTrueEmptyRef() instead")
390 virtual ThatClass* cloneTrueEmpty() = 0;
391
392 //! Clone la donnée
393 virtual Ref<ThatClass> cloneTrueRef() = 0;
394
395 //! Clone la donnée mais sans éléments.
396 virtual Ref<ThatClass> cloneTrueEmptyRef() = 0;
397
398 //! \internal
399 virtual IArray2DataInternalT<DataType>* _internal() = 0;
400};
401
402/*---------------------------------------------------------------------------*/
403/*---------------------------------------------------------------------------*/
404/*!
405 * \internal
406 * \brief Interface d'une donnée tableau 2D à taille multiple d'un type \a T
407 * \deprecated Cette interface n'est plus utilisée.
408 */
409template <class DataType>
411: public IMultiArray2Data
412{
413 public:
414 typedef IMultiArray2DataT<DataType> ThatClass;
415
416
417 //! Valeur de la donnée
419
420 //! Valeur de la donnée
421 virtual const MultiArray2<DataType>& value() const = 0;
422
423 //! Clone la donnée
424 virtual ThatClass* cloneTrue() = 0;
425
426 //! Clone la donnée mais sans éléments.
427 virtual ThatClass* cloneTrueEmpty() = 0;
428};
429
430/*---------------------------------------------------------------------------*/
431/*---------------------------------------------------------------------------*/
432
433} // End namespace Arcane
434
435/*---------------------------------------------------------------------------*/
436/*---------------------------------------------------------------------------*/
437
438#endif
#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
Informations sur l'allocation d'une donnée.
Informations de type pour un conteneur de données.
Interface du pattern visitor pour une donnée tableau 2D.
Interface d'une donnée tableau 2D.
Definition IData.h:340
Interface du pattern visitor pour une donnée tableau.
Interface d'une donnée tableau 1D.
Definition IData.h:276
virtual void visit(IDataVisitor *visitor)=0
Applique le visiteur à la donnée.
virtual void visit(IArrayDataVisitor *visitor)=0
Applique le visiteur à la donnée.
Interface du pattern visitor pour une donnée.
Interface d'une donnée.
Definition IData.h:33
virtual Integer dimension() const =0
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, 2 pour un tableau bi-dim.
virtual Integer multiTag() const =0
Tag multiple. 0 si non multiple, 1 si multiple, 2 si multiple pour les variable MultiArray (obsolète)
virtual eDataType dataType() const =0
Type de la donnée.
Interface d'un algorithme de hashage.
virtual ThatClass * cloneTrue()=0
Clone la donnée.
virtual ThatClass * cloneTrueEmpty()=0
Clone la donnée mais sans éléments.
virtual const MultiArray2< DataType > & value() const =0
Valeur de la donnée.
virtual MultiArray2< DataType > & value()=0
Valeur de la donnée.
Interface du pattern visitor pour une donnée tableau 2D à taille variable.
Interface d'une donnée tableau multi 2D.
Definition IData.h:351
virtual DataType & value()=0
Valeur de la donnée.
virtual const DataType & value() const =0
Valeur de la donnée.
Interface du pattern visitor pour une donnée scalaire.
Interface d'une donnée scalaire.
Definition IData.h:227
virtual void visit(IDataVisitor *visitor)=0
Applique le visiteur à la donnée.
virtual void visit(IScalarDataVisitor *visitor)=0
Applique le visiteur à la donnée.
Classe de base des tableau 2D à taille multiple.
Definition MultiArray2.h:57
Vue modifiable pour un tableau 2D.
Classe représentant un tableau 2D classique.
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.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eDataType
Type d'une donnée.
Definition DataTypes.h:39