Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ArrayData.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* ArrayData.h (C) 2000-2024 */
9/* */
10/* Donnée du type 'Array'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMPL_INTERNAL_ARRAYDATA_H
13#define ARCANE_IMPL_INTERNAL_ARRAYDATA_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include "arcane/utils/ArrayShape.h"
20#include "arcane/utils/String.h"
21#include "arcane/utils/IDataCompressor.h"
22#include "arcane/utils/Array.h"
23#include "arcane/utils/MemoryView.h"
24#include "arcane/utils/Ref.h"
25#include "arcane/utils/NotSupportedException.h"
26
27#include "arcane/core/IData.h"
28#include "arcane/core/IDataVisitor.h"
29#include "arcane/core/internal/IDataInternal.h"
30#include "arcane/core/datatype/DataAllocationInfo.h"
31#include "arcane/core/datatype/DataTypeTraits.h"
32#include "arcane/core/datatype/DataStorageTypeInfo.h"
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
45template<class DataType>
48, public IArrayDataT<DataType>
49{
50 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
51 class Impl;
52 friend class Impl;
53
54 public:
55
58
59 public:
60
61 explicit ArrayDataT(ITraceMng* trace);
62 explicit ArrayDataT(const DataStorageBuildInfo& dsbi);
64 ~ArrayDataT() override;
65
66 public:
67
68 Integer dimension() const override { return 1; }
69 Integer multiTag() const override { return 0; }
70 eDataType dataType() const override { return DataTypeTraitsT<DataType>::type(); }
71 void serialize(ISerializer* sbuf,IDataOperation* operation) override;
72 void serialize(ISerializer* sbuf,Int32ConstArrayView ids,IDataOperation* operation) override;
73 Array<DataType>& value() override { return m_value; }
74 const Array<DataType>& value() const override { return m_value; }
75 ConstArrayView<DataType> view() const override { return m_value; }
76 ArrayView<DataType> view() override { return m_value; }
77 void resize(Integer new_size) override { m_value.resize(new_size); }
78 IData* clone() override { return _cloneTrue(); }
79 IData* cloneEmpty() override { return _cloneTrueEmpty(); };
80 Ref<IData> cloneRef() override { return makeRef(cloneTrue()); }
81 Ref<IData> cloneEmptyRef() override { return makeRef(cloneTrueEmpty()); }
82 DataStorageTypeInfo storageTypeInfo() const override;
83 DataInterfaceType* cloneTrue() override { return _cloneTrue(); }
84 DataInterfaceType* cloneTrueEmpty() override { return _cloneTrueEmpty(); }
85 Ref<DataInterfaceType> cloneTrueRef() override { auto* d = _cloneTrue(); return makeRef(d); }
86 Ref<DataInterfaceType> cloneTrueEmptyRef() override { auto* d = _cloneTrueEmpty(); return makeRef(d); }
87 void fillDefault() override;
88 void setName(const String& name) override;
91 void assignSerializedData(const ISerializedData* sdata) override;
92 void copy(const IData* data) override;
93 void swapValues(IData* data) override;
94 void computeHash(IHashAlgorithm* algo,ByteArray& output) const override;
96 ArrayShape shape() const override { return m_shape; }
97 void setShape(const ArrayShape& new_shape) override { m_shape = new_shape; }
98 void setAllocationInfo(const DataAllocationInfo& v) override;
99 DataAllocationInfo allocationInfo() const override { return m_allocation_info; }
101 {
102 visitor->applyVisitor(this);
103 }
104 void visit(IDataVisitor* visitor) override
105 {
106 visitor->applyDataVisitor(this);
107 }
109 {
110 ARCANE_THROW(NotSupportedException, "Can not visit scalar data with array data");
111 }
113 {
114 visitor->applyVisitor(this);
115 }
117 {
118 ARCANE_THROW(NotSupportedException,"Can not visit array2 data with array data");
119 }
120
121 public:
122
123 void swapValuesDirect(ThatClass* true_data);
124 void changeAllocator(const MemoryAllocationOptions& alloc_info);
125
126 public:
127
128 IArrayDataInternalT<DataType>* _internal() override { return m_internal; }
129 IDataInternal* _commonInternal() override { return m_internal; }
130
131 public:
132
133 static DataStorageTypeInfo staticStorageTypeInfo();
134
135 public:
136
137
138 private:
139
141 ITraceMng* m_trace;
143 ArrayShape m_shape;
144 DataAllocationInfo m_allocation_info;
145
146 private:
147
148 void _serialize(ISerializer* sbuf,Span<const Int32> ids,IDataOperation* operation);
149 IArrayDataT<DataType>* _cloneTrue() const { return new ThatClass(*this); }
150 IArrayDataT<DataType>* _cloneTrueEmpty() const { return new ThatClass(m_trace); }
151 void _setShape();
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157template<typename DataType>
158class ArrayDataT<DataType>::Impl
159: public IArrayDataInternalT<DataType>
161{
162 public:
163
164 explicit Impl(ArrayDataT<DataType>* p) : m_p(p){}
165
166 public:
167
168 void reserve(Integer new_capacity) override { m_p->m_value.reserve(new_capacity); }
169 Array<DataType>& _internalDeprecatedValue() override { return m_p->m_value; }
170 Integer capacity() const override { return m_p->m_value.capacity(); }
171 void shrink() const override { m_p->m_value.shrink(); }
172 void resize(Integer new_size) override { m_p->m_value.resize(new_size);}
173 void dispose() override { m_p->m_value.dispose(); }
175 {
176 IDataCompressor* compressor = buf.m_compressor;
177 if (!compressor)
178 return false;
179 Span<const DataType> values = m_p->m_value;
180 Span<const std::byte> bytes = asBytes(values);
181 compressor->compress(bytes,buf.m_buffer);
182 buf.m_original_dim1_size = values.size();
183 m_p->m_value.clear();
184 m_p->m_value.shrink();
185 return true;
186 }
188 {
189 IDataCompressor* compressor = buf.m_compressor;
190 if (!compressor)
191 return false;
192 m_p->m_value.resize(buf.m_original_dim1_size);
193 Span<DataType> values = m_p->m_value;
194 compressor->decompress(buf.m_buffer,asWritableBytes(values));
195 return true;
196 }
198 {
199 return makeMutableMemoryView<DataType>(m_p->view());
200 }
201 Int32 extent0() const override
202 {
203 return m_p->view().size();
204 }
205 INumericDataInternal* numericData() override { return this; }
206 void changeAllocator(const MemoryAllocationOptions& v) override { m_p->changeAllocator(v); }
208 {
209 m_p->computeHash(hash_info);
210 }
211
212 private:
213
215};
216
217/*---------------------------------------------------------------------------*/
218/*---------------------------------------------------------------------------*/
219
220} // End namesapce Arcane
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
225#endif
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
void computeHash(DataHashInfo &hash_info) override
Calcule le hash de la donnée.
Definition ArrayData.h:207
void reserve(Integer new_capacity) override
Réserve de la mémoire pour new_capacity éléments.
Definition ArrayData.h:168
void resize(Integer new_size) override
Redimensionne le conteneur.
Definition ArrayData.h:172
INumericDataInternal * numericData() override
Interface générique pour les données numériques (nullptr si la donnée n'est pas numérique)
Definition ArrayData.h:205
bool decompressAndFill(DataCompressionBuffer &buf) override
Décompresse les données et remplit les valeurs de la donnée.
Definition ArrayData.h:187
Integer capacity() const override
Capacité allouée par le conteneur.
Definition ArrayData.h:170
Array< DataType > & _internalDeprecatedValue() override
Conteneur associé à la donnée.
Definition ArrayData.h:169
void changeAllocator(const MemoryAllocationOptions &v) override
Change l'allocateur de la variable.
Definition ArrayData.h:206
void dispose() override
Vide le conteneur et libère la mémoire alloué.
Definition ArrayData.h:173
void shrink() const override
Libère la mémoire additionnelle éventuellement allouée.
Definition ArrayData.h:171
Int32 extent0() const override
Nombre d'éléments de la première dimension.
Definition ArrayData.h:201
MutableMemoryView memoryView() override
Vue mémoire sur la donnée.
Definition ArrayData.h:197
bool compressAndClear(DataCompressionBuffer &buf) override
Compresse les données et libère la mémoire associée.
Definition ArrayData.h:174
Donnée tableau d'un type T.
Definition ArrayData.h:49
IData * cloneEmpty() override
Clone la donnée mais sans éléments. L'instance créée doit être détruite par l'opérateur 'delete'.
Definition ArrayData.h:79
ArrayView< DataType > view() override
Vue sur la donnée.
Definition ArrayData.h:76
eDataType dataType() const override
Type de la donnée.
Definition ArrayData.h:70
ConstArrayView< DataType > view() const override
Vue constante sur la donnée.
Definition ArrayData.h:75
Ref< ISerializedData > createSerializedDataRef(bool use_basic_type) const override
Sérialise la donnée.
void serialize(ISerializer *sbuf, IDataOperation *operation) override
Sérialise la donnée en appliquant l'opération operation.
void allocateBufferForSerializedData(ISerializedData *sdata) override
Alloue la mémoire pour lire les valeurs sérialisées sdata.
void visitScalar(IScalarDataVisitor *) override
Applique le visiteur à la donnée.
Definition ArrayData.h:108
void computeHash(IHashAlgorithm *algo, ByteArray &output) const override
Calcul une clé de hashage sur cette donnée.
DataStorageTypeInfo storageTypeInfo() const override
Informations sur le type de conteneur de la donnée.
ArrayShape shape() const override
Forme du tableau pour une donnée 1D ou 2D.
Definition ArrayData.h:96
Ref< IData > cloneRef() override
Clone la donnée.
Definition ArrayData.h:80
const Array< DataType > & value() const override
Valeur constante de la donnée.
Definition ArrayData.h:74
void setName(const String &name) override
Positionne le nom de la donnée (interne)
void visitArray2(IArray2DataVisitor *) override
Applique le visiteur à la donnée.
Definition ArrayData.h:116
void visitArray(IArrayDataVisitor *visitor) override
Applique le visiteur à la donnée.
Definition ArrayData.h:112
DataAllocationInfo allocationInfo() const override
Informations sur l'allocation.
Definition ArrayData.h:99
DataInterfaceType * cloneTrue() override
Clone la donnée.
Definition ArrayData.h:83
void visit(IArrayDataVisitor *visitor) override
Applique le visiteur à la donnée.
Definition ArrayData.h:100
void swapValues(IData *data) override
Échange les valeurs de data avec celles de l'instance.
void assignSerializedData(const ISerializedData *sdata) override
Assigne à la donnée les valeurs sérialisées sdata.
DataInterfaceType * cloneTrueEmpty() override
Clone la donnée mais sans éléments.
Definition ArrayData.h:84
UniqueArray< DataType > m_value
Donnée.
Definition ArrayData.h:140
Array< DataType > & value() override
Valeur de la donnée.
Definition ArrayData.h:73
Integer multiTag() const override
Tag multiple. 0 si non multiple, 1 si multiple, 2 si multiple pour les variable MultiArray (obsolète)
Definition ArrayData.h:69
void fillDefault() override
Remplit la donnée avec sa valeur par défaut.
void visit(IDataVisitor *visitor) override
Applique le visiteur à la donnée.
Definition ArrayData.h:104
Integer dimension() const override
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, 2 pour un tableau bi-dim.
Definition ArrayData.h:68
void copy(const IData *data) override
Copie la donnée data dans l'instance courante.
Ref< DataInterfaceType > cloneTrueEmptyRef() override
Clone la donnée mais sans éléments.
Definition ArrayData.h:86
Ref< IData > cloneEmptyRef() override
Clone la donnée mais sans éléments.
Definition ArrayData.h:81
void resize(Integer new_size) override
Redimensionne la donnée.
Definition ArrayData.h:77
IData * clone() override
Clone la donnée. L'instance créée doit être détruite par l'opérateur 'delete'.
Definition ArrayData.h:78
void setAllocationInfo(const DataAllocationInfo &v) override
Positionne les informations sur l'allocation.
void setShape(const ArrayShape &new_shape) override
Positionne la forme du tableau.
Definition ArrayData.h:97
IDataInternal * _commonInternal() override
Definition ArrayData.h:129
Ref< DataInterfaceType > cloneTrueRef() override
Clone la donnée.
Definition ArrayData.h:85
IArrayDataInternalT< DataType > * _internal() override
Definition ArrayData.h:128
Forme d'un tableau.
Definition ArrayShape.h:40
Tableau d'items de types quelconques.
Informations sur l'allocation d'une donnée.
Classe pour gérer la compression/décompression des données.
Informations pour le calcul du hash d'une donnée.
Informations pour construire une instance de 'IData'.
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 d'un type T.
Interface d'une donnée tableau d'un type T.
Definition IData.h:292
Interface du pattern visitor pour une donnée tableau.
Interface d'un service permettant de compresser/décompresser des données.
Partie interne de IData.
Interface d'une opération sur une donnée.
Interface du pattern visitor pour une donnée.
Interface d'une donnée.
Definition IData.h:33
Interface d'un algorithme de hashage.
Interface pour un 'IData' d'un type numérique.
Interface du pattern visitor pour une donnée scalaire.
Interface d'une donnée sérialisée.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
Vue constante d'un tableau de type T.
Interface du gestionnaire de traces.
Options pour configurer les allocations.
Exception lorsqu'une opération n'est pas supportée.
Implémentation thread-safe d'un compteur de référence.
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