12#ifndef ARCANE_IMPL_INTERNAL_ARRAY2DATA_H
13#define ARCANE_IMPL_INTERNAL_ARRAY2DATA_H
19#include "arcane/utils/ArrayShape.h"
20#include "arcane/utils/String.h"
21#include "arcane/utils/IDataCompressor.h"
22#include "arcane/utils/Array2.h"
23#include "arcane/utils/MemoryView.h"
24#include "arcane/utils/Ref.h"
25#include "arcane/utils/FatalErrorException.h"
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"
45template <
class DataType>
50 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
56 typedef Array2DataT<DataType> ThatClass;
63 Array2DataT(
const Array2DataT<DataType>& rhs);
64 ~Array2DataT()
override;
83 DataInterfaceType*
cloneTrue()
override {
return _cloneTrue(); }
87 auto* d = _cloneTrue();
92 auto* d = _cloneTrueEmpty();
111 visitor->applyVisitor(
this);
115 visitor->applyDataVisitor(
this);
127 visitor->applyVisitor(
this);
132 void swapValuesDirect(ThatClass* true_data);
161template <
typename DataType>
162class Array2DataT<DataType>::Impl
168 explicit Impl(Array2DataT<DataType>* p)
174 void reserve(
Integer new_capacity)
override { m_p->m_value.reserve(new_capacity); }
177 m_p->m_value.resize(new_dim1_size, m_p->m_value.dim2Size());
181 if (new_dim1_size < 0)
182 ARCANE_FATAL(
"Bad value '{0}' for dim1_size", new_dim1_size);
183 if (new_dim2_size < 0)
184 ARCANE_FATAL(
"Bad value '{0}' for dim2_size", new_dim2_size);
187 bool need_reshape =
false;
188 if (new_dim2_size != m_p->m_value.dim2Size())
190 m_p->m_value.resize(new_dim1_size, new_dim2_size);
192 m_p->m_shape.setNbDimension(1);
193 m_p->m_shape.setDimension(0, new_dim2_size);
197 void shrink()
const override { m_p->m_value.shrink(); }
205 compressor->
compress(bytes, buf.m_buffer);
206 buf.m_original_dim1_size = m_p->m_value.dim1Size();
207 buf.m_original_dim2_size = m_p->m_value.dim2Size();
208 m_p->m_value.clear();
209 m_p->m_value.shrink();
217 m_p->m_value.resize(buf.m_original_dim1_size, buf.m_original_dim2_size);
229 Int32 nb_basic_element = storage_info.nbBasicElement();
231 return makeMutableMemoryView(
value.data(), datatype_size * dim2_size, dim1_size);
235 return m_p->view().dim1Size();
241 m_p->computeHash(hash_info);
246 Array2DataT<DataType>* m_p;
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Int32 extent0() const override
Nombre d'éléments de la première dimension.
void resizeOnlyDim1(Int32 new_dim1_size) override
Redimensionne le conteneur.
Array2< DataType > & _internalDeprecatedValue() override
Conteneur associé à la donnée.
MutableMemoryView memoryView() override
Vue mémoire sur la donnée.
bool decompressAndFill(DataCompressionBuffer &buf) override
Décompresse les données et remplit les valeurs de la donnée.
void resize(Int32 new_dim1_size, Int32 new_dim2_size) override
Redimensionne le conteneur.
void changeAllocator(const MemoryAllocationOptions &v) override
Change l'allocateur de la variable.
bool compressAndClear(DataCompressionBuffer &buf) override
Compresse les données et libère la mémoire associée.
void computeHash(DataHashInfo &hash_info) override
Calcule le hash de la donnée.
void reserve(Integer new_capacity) override
Réserve de la mémoire pour new_capacity éléments.
INumericDataInternal * numericData() override
Interface générique pour les données numériques (nullptr si la donnée n'est pas numérique)
void shrink() const override
Libère la mémoire additionnelle éventuellement allouée.
ConstArray2View< DataType > view() const override
Vue constante sur la donnée.
void fillDefault() override
Remplit la donnée avec sa valeur par défaut.
void assignSerializedData(const ISerializedData *sdata) override
Assigne à la donnée les valeurs sérialisées sdata.
void resize(Integer new_size) override
Redimensionne la donnée.
IData * clone() override
Clone la donnée. L'instance créée doit être détruite par l'opérateur 'delete'.
const Array2< DataType > & value() const override
Valeur de la donnée.
void visitArray2(IArray2DataVisitor *visitor) override
Applique le visiteur à la donnée.
UniqueArray2< DataType > m_value
Donnée.
DataAllocationInfo allocationInfo() const override
Informations sur l'allocation.
IData * cloneEmpty() override
Clone la donnée mais sans éléments. L'instance créée doit être détruite par l'opérateur 'delete'.
Ref< DataInterfaceType > cloneTrueRef() override
Clone la donnée.
IDataInternal * _commonInternal() override
void computeHash(IHashAlgorithm *algo, ByteArray &output) const override
Calcul une clé de hashage sur cette donnée.
Ref< IData > cloneRef() override
Clone la donnée.
void serialize(ISerializer *sbuf, IDataOperation *operation) override
Sérialise la donnée en appliquant l'opération operation.
Ref< IData > cloneEmptyRef() override
Clone la donnée mais sans éléments.
Ref< ISerializedData > createSerializedDataRef(bool use_basic_type) const override
Sérialise la donnée.
DataInterfaceType * cloneTrueEmpty() override
Clone la donnée mais sans éléments.
void allocateBufferForSerializedData(ISerializedData *sdata) override
Alloue la mémoire pour lire les valeurs sérialisées sdata.
DataStorageTypeInfo storageTypeInfo() const override
Informations sur le type de conteneur de la donnée.
IArray2DataInternalT< DataType > * _internal() override
Array2< DataType > & value() override
Valeur de la donnée.
Integer dimension() const override
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, 2 pour un tableau bi-dim.
DataInterfaceType * cloneTrue() override
Clone la donnée.
Ref< DataInterfaceType > cloneTrueEmptyRef() override
Clone la donnée mais sans éléments.
void swapValues(IData *data) override
Échange les valeurs de data avec celles de l'instance.
Array2View< DataType > view() override
Vue sur la donnée.
void visit(IDataVisitor *visitor) override
Applique le visiteur à la donnée.
Integer multiTag() const override
Tag multiple. 0 si non multiple, 1 si multiple, 2 si multiple pour les variable MultiArray (obsolète)
void visitScalar(IScalarDataVisitor *) override
Applique le visiteur à la donnée.
void setAllocationInfo(const DataAllocationInfo &v) override
Positionne les informations sur l'allocation.
void setShape(const ArrayShape &new_shape) override
Positionne la forme du tableau.
eDataType dataType() const override
Type de la donnée.
ArrayShape shape() const override
Forme du tableau pour une donnée 1D ou 2D.
void visitArray(IArrayDataVisitor *) override
Applique le visiteur à la donnée.
void copy(const IData *data) override
Copie la donnée data dans l'instance courante.
void setName(const String &name) override
Positionne le nom de la donnée (interne)
Vue modifiable pour un tableau 2D.
Tableau 2D d'items de types quelconques.
Vue pour un tableau 2D constant.
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 d'une donnée tableau bi-dimensionnel d'un type T.
Interface d'une donnée tableau bi-dimensionnel d'un type T.
Interface du pattern visitor pour une donnée tableau 2D.
Interface du pattern visitor pour une donnée tableau.
Interface d'un service permettant de compresser/décompresser des données.
virtual void decompress(Span< const std::byte > compressed_values, Span< std::byte > values)=0
Décompresse les données compressed_values et les stocke dans values.
virtual void compress(Span< const std::byte > values, Array< std::byte > &compressed_values)=0
Compresse les données values et les stocke dans compressed_values.
Interface d'une opération sur une donnée.
Interface du pattern visitor pour une donnée.
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.
Interface d'un sérialiseur.
Interface du gestionnaire de traces.
Options pour configurer les allocations.
Exception lorsqu'une opération n'est pas supportée.
Référence à une instance.
Implémentation thread-safe d'un compteur de référence.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur de données 2D avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Integer basicDataTypeSize(eBasicDataType type)
Taille du type de donnée type.
impl::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets modifiables.
Int32 Integer
Type représentant un entier.
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
eDataType
Type d'une donnée.
std::int32_t Int32
Type entier signé sur 32 bits.