17#include "arcane/utils/IDataCompressor.h"
18#include "arcane/utils/Array2.h"
19#include "arcane/utils/NotSupportedException.h"
20#include "arcane/utils/Real2.h"
21#include "arcane/utils/Real2x2.h"
22#include "arcane/utils/Real3.h"
23#include "arcane/utils/Real3x3.h"
24#include "arcane/utils/IHashAlgorithm.h"
25#include "arcane/utils/NotImplementedException.h"
26#include "arcane/utils/ArgumentException.h"
27#include "arcane/utils/FatalErrorException.h"
28#include "arcane/utils/ITraceMng.h"
29#include "arcane/utils/CheckedConvert.h"
30#include "arcane/utils/ArrayShape.h"
31#include "arcane/utils/MemoryAllocator.h"
32#include "arcane/utils/MemoryView.h"
34#include "arcane/core/datatype/DataAllocationInfo.h"
35#include "arcane/core/datatype/DataStorageBuildInfo.h"
36#include "arcane/core/datatype/IDataOperation.h"
37#include "arcane/core/datatype/DataStorageTypeInfo.h"
38#include "arcane/core/datatype/DataTypeTraits.h"
40#include "arcane/core/ISerializer.h"
41#include "arcane/core/IData.h"
42#include "arcane/core/IDataVisitor.h"
44#include "arcane/core/internal/IDataInternal.h"
46#include "arcane/impl/SerializedData.h"
47#include "arcane/impl/DataStorageFactory.h"
57 const Int64 SERIALIZE2_MAGIC_NUMBER = 0x12ff7789;
66template <
class DataType>
71 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
90 Integer
multiTag()
const override {
return 0; }
128 visitor->applyDataVisitor(
this);
145 void swapValuesDirect(ThatClass*
true_data);
174template<
typename DataType>
203 m_p->m_shape.setNbDimension(1);
208 void shrink()
const override { m_p->m_value.shrink(); }
217 buf.m_original_dim1_size = m_p->m_value.dim1Size();
218 buf.m_original_dim2_size = m_p->m_value.dim2Size();
219 m_p->m_value.clear();
220 m_p->m_value.shrink();
228 m_p->m_value.resize(buf.m_original_dim1_size,buf.m_original_dim2_size);
230 compressor->decompress(buf.m_buffer,asWritableBytes(values));
237 Int32 dim1_size =
value.dim1Size();
238 Int32 dim2_size =
value.dim2Size();
246 return m_p->view().dim1Size();
267, m_internal(
new Impl(this))
274template<
typename DataType> Array2DataT<DataType>::
275Array2DataT(
const Array2DataT<DataType>& rhs)
276:
m_value(AlignedMemoryAllocator::Simd())
277, m_trace(rhs.m_trace)
278, m_internal(new Impl(this))
279, m_allocation_info(rhs.m_allocation_info)
287template<
typename DataType> Array2DataT<DataType>::
288Array2DataT(
const DataStorageBuildInfo& dsbi)
289:
m_value(dsbi.memoryAllocator())
290, m_trace(dsbi.traceMng())
291, m_internal(new Impl(this))
298template<
typename DataType> Array2DataT<DataType>::
310template<
typename DataType> DataStorageTypeInfo Array2DataT<DataType>::
311staticStorageTypeInfo()
313 typedef DataTypeTraitsT<DataType> TraitsType;
315 Int32 nb_basic_type = TraitsType::nbBasicType();
318 return DataStorageTypeInfo(bdt,nb_basic_type,
dimension,multi_tag);
327 return staticStorageTypeInfo();
363 dimensions.resize(2);
364 dimensions[0] =
m_value.dim1Size();
365 dimensions[1] =
m_value.dim2Size();
390 Int64 dim1_size =
sdata->extents()[0];
391 Int64 dim2_size =
sdata->extents()[1];
397 m_shape =
sdata->shape();
410 ARCANE_UNUSED(
sdata);
425 if (mode==ISerializer::ModeReserve){
437 Int64 count =
m_value.dim1Size();
451 Int64 n[4] = { 0, 0, 0, 0 };
454 Int64 dim2_size = n[1];
458 switch(
sbuf->readMode()){
501 if (mode==ISerializer::ModeReserve){
514 Int32 count = ids.size();
515 Int64 dim2_size =
m_value.dim2Size();
533 for( Int32 i=0, is=count; i<is; ++i ){
534 const BasicType*
sub_a =
reinterpret_cast<const BasicType*
>(
m_value[ids[i]].data());
544 switch(
sbuf->readMode()){
547 Int64 n[4] = { 0, 0, 0, 0 };
550 Int64 dim2_size = n[1];
552 Int64 total = count * dim2_size;
567 ARCANE_FATAL(
"serialized data should have the same dim2Size current={0} found={1}",
588 for( Int32 i=0, n=count; i<n; ++i ){
590 for( Int64 z=0,
iz=dim2_size; z<
iz; ++z ){
605 for( Int32 i=0, n=count; i<n; ++i ){
607 for( Int64 z=0,
iz=dim2_size; z<
iz; ++z ){
652 const Byte*
ptr =
reinterpret_cast<const Byte*
>(values.data());
658 dimensions[0] =
m_value.dim1Size();
659 dimensions[1] =
m_value.dim2Size();
660 ptr =
reinterpret_cast<const Byte*
>(dimensions.data());
661 Int64
array_len = dimensions.size() *
sizeof(Int64);
677 dimensions[0] =
m_value.dim1Size();
678 dimensions[1] =
m_value.dim2Size();
725 if (m_allocation_info==v)
727 m_allocation_info = v;
745registerArray2DataFactory(IDataFactoryMng* dfm)
747 DataStorageFactory<Array2DataT<Byte>>::registerDataFactory(dfm);
748 DataStorageFactory<Array2DataT<Real>>::registerDataFactory(dfm);
749 DataStorageFactory<Array2DataT<Int16>>::registerDataFactory(dfm);
750 DataStorageFactory<Array2DataT<Int32>>::registerDataFactory(dfm);
751 DataStorageFactory<Array2DataT<Int64>>::registerDataFactory(dfm);
752 DataStorageFactory<Array2DataT<Real2>>::registerDataFactory(dfm);
753 DataStorageFactory<Array2DataT<Real3>>::registerDataFactory(dfm);
754 DataStorageFactory<Array2DataT<Real2x2>>::registerDataFactory(dfm);
755 DataStorageFactory<Array2DataT<Real3x3>>::registerDataFactory(dfm);
761template class Array2DataT<Byte>;
762template class Array2DataT<Real>;
763template class Array2DataT<Int16>;
764template class Array2DataT<Int32>;
765template class Array2DataT<Int64>;
766template class Array2DataT<Real2>;
767template class Array2DataT<Real2x2>;
768template class Array2DataT<Real3>;
769template class Array2DataT<Real3x3>;
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Gestion des références à une classe C++.
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.
Donnée tableau bi-dimensionnel d'un type DataType.
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)
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 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.
Interface d'une opération sur une donnée.
Interface du pattern visitor pour une donnée.
Contexte pour calculer un hash de manière incrémentale.
virtual void updateHash(Span< const std::byte > input)=0
Ajoute le tableau input au hash calculé
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.
void setMemoryLocationHint(eMemoryLocationHint new_hint)
Modifie les informations sur la localisation mémoire.
Allocateur mémoire avec alignement mémoire spécifique.
Exception lorsqu'un argument est invalide.
Integer totalNbElement() const
Nombre total d'éléments (dim1Size()*dim2Size())
void setDebugName(const String &name)
Positionne le nom du tableau pour les informations de debug.
void copy(Span2< const DataType > rhs)
Redimensionne l'instance à partir des dimensions de rhs et copie dedans les valeurs de rhs.
void resize(Int64 new_size)
Redimensionne uniquement la première dimension en laissant la deuxième à l'identique.
Span< DataType > to1DSpan()
Vue du tableau sous forme de tableau 1D.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
eMode
Mode de fonctionnement du sérialiseur.
@ ModePut
Le sérialiseur attend des reserve()
@ ModeGet
Le sérialiseur attend des get()
@ ReadAdd
Ajoute aux éléments actuels ceux lus.
@ ReadReplace
Replace les éléments actuels par ceux lus.
Interface du gestionnaire de traces.
Options pour configurer les allocations.
Exception lorsqu'une fonction n'est pas implémentée.
Exception lorsqu'une opération n'est pas supportée.
Implémentation thread-safe d'un compteur de référence.
constexpr ARCCORE_HOST_DEVICE pointer data() const noexcept
Pointeur sur le début de la vue.
Chaîne de caractères unicode.
void swap(UniqueArray2< T > &rhs) ARCCORE_NOEXCEPT
Échange les valeurs de l'instance avec celles de rhs.
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Ref< ISerializedData > arcaneCreateSerializedDataRef(eDataType data_type, Int64 memory_size, Integer nb_dim, Int64 nb_element, Int64 nb_base_element, bool is_multi_size, Int64ConstArrayView dimensions)
Créé des données sérialisées.
eDataType
Type d'une donnée.
@ DT_Int64
Donnée de type entier 64 bits.
eBasicDataType
Type d'une donnée de base.