Arcane  v4.1.0.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-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/* IData.h (C) 2000-2025 */
9/* */
10/* Interface d'une donnée. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IDATA_H
13#define ARCANE_CORE_IDATA_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
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
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 */
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
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
Déclarations des types généraux de Arcane.
#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS()
Macro pour déclarer les méthodes virtuelles gérant les compteurs de référence.
Vue modifiable pour un tableau 2D.
Classe représentant un tableau 2D classique.
Forme d'un tableau.
Definition ArrayShape.h:40
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Informations sur l'allocation d'une donnée.
Informations de type pour un conteneur de données.
virtual Ref< ThatClass > cloneTrueRef()=0
virtual Array2< T > & value()=0
virtual ThatClass * cloneTrue()=0
virtual ConstArray2View< T > view() const=0
virtual Ref< ThatClass > cloneTrueEmptyRef()=0
virtual ThatClass * cloneTrueEmpty()=0
Interface du pattern visitor pour une donnée tableau 2D.
Interface d'une donnée tableau 2D.
Definition IData.h:340
virtual ThatClass * cloneTrueEmpty()=0
virtual ThatClass * cloneTrue()=0
virtual Ref< ThatClass > cloneTrueRef()=0
virtual Ref< ThatClass > cloneTrueEmptyRef()=0
virtual ConstArrayView< T > view() const=0
virtual Array< T > & value()=0
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 Ref< ISerializedData > createSerializedDataRef(bool use_basic_type) const =0
Sérialise la donnée.
virtual void allocateBufferForSerializedData(ISerializedData *sdata)=0
Alloue la mémoire pour lire les valeurs sérialisées sdata.
virtual void copy(const IData *data)=0
Copie la donnée data dans l'instance courante.
virtual DataAllocationInfo allocationInfo() const =0
Informations sur l'allocation.
virtual void serialize(ISerializer *sbuf, IDataOperation *operation)=0
Sérialise la donnée en appliquant l'opération operation.
virtual IData * clone()=0
Clone la donnée. L'instance créée doit être détruite par l'opérateur 'delete'.
virtual void swapValues(IData *data)=0
Échange les valeurs de data avec celles de l'instance.
virtual IData * cloneEmpty()=0
Clone la donnée mais sans éléments. L'instance créée doit être détruite par l'opérateur 'delete'.
virtual void computeHash(IHashAlgorithm *algo, ByteArray &output) const =0
Calcul une clé de hashage sur cette donnée.
virtual void visitArray2(IArray2DataVisitor *visitor)=0
Applique le visiteur à la donnée.
virtual void setName(const String &name)=0
Positionne le nom de la donnée (interne)
virtual void visit(IDataVisitor *visitor)=0
Applique le visiteur à la donnée.
virtual Integer dimension() const =0
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, 2 pour un tableau bi-dim.
virtual void visitArray(IArrayDataVisitor *visitor)=0
Applique le visiteur à la donnée.
virtual Integer multiTag() const =0
Tag multiple. 0 si non multiple, 1 si multiple, 2 si multiple pour les variable MultiArray (obsolète)
virtual void fillDefault()=0
Remplit la donnée avec sa valeur par défaut.
virtual void setAllocationInfo(const DataAllocationInfo &v)=0
Positionne les informations sur l'allocation.
virtual void visitMultiArray2(IMultiArray2DataVisitor *visitor)
Applique le visiteur à la donnée.
Definition Data.cc:56
virtual Ref< IData > cloneRef()=0
Clone la donnée.
virtual void visitScalar(IScalarDataVisitor *visitor)=0
Applique le visiteur à la donnée.
virtual eDataType dataType() const =0
Type de la donnée.
virtual Ref< IData > cloneEmptyRef()=0
Clone la donnée mais sans éléments.
virtual void resize(Integer new_size)=0
Redimensionne la donnée.
virtual void setShape(const ArrayShape &new_shape)=0
Positionne la forme du tableau.
virtual void assignSerializedData(const ISerializedData *sdata)=0
Assigne à la donnée les valeurs sérialisées sdata.
virtual DataStorageTypeInfo storageTypeInfo() const =0
Informations sur le type de conteneur de la donnée.
virtual ArrayShape shape() const =0
Forme du tableau pour une donnée 1D ou 2D.
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 ThatClass * cloneTrue()=0
virtual DataType & value()=0
Valeur de la donnée.
virtual Ref< ThatClass > cloneTrueRef()=0
virtual ThatClass * cloneTrueEmpty()=0
virtual const DataType & value() const =0
Valeur de la donnée.
virtual Ref< ThatClass > cloneTrueEmptyRef()=0
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:61
Référence à une instance.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
Definition UtilsTypes.h:137
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:498
eDataType
Type d'une donnée.
Definition DataTypes.h:39