14#include "arcane/impl/internal/Array2Data.h"
16#include "arcane/utils/NotSupportedException.h"
17#include "arcane/utils/Real2.h"
18#include "arcane/utils/Real2x2.h"
19#include "arcane/utils/Real3.h"
20#include "arcane/utils/Real3x3.h"
21#include "arcane/utils/IHashAlgorithm.h"
22#include "arcane/utils/NotImplementedException.h"
23#include "arcane/utils/ArgumentException.h"
24#include "arcane/utils/FatalErrorException.h"
25#include "arcane/utils/ITraceMng.h"
26#include "arcane/utils/CheckedConvert.h"
27#include "arcane/utils/MemoryAllocator.h"
29#include "arcane/core/datatype/DataStorageBuildInfo.h"
30#include "arcane/core/datatype/IDataOperation.h"
32#include "arcane/core/ISerializer.h"
34#include "arcane/impl/SerializedData.h"
47inline constexpr Int64 SERIALIZE2_MAGIC_NUMBER = 0x12ff7789;
53template<
typename DataType> Array2DataT<DataType>::
54Array2DataT(ITraceMng* trace)
55: m_value(AlignedMemoryAllocator::Simd())
57, m_internal(new Impl(this))
64template<
typename DataType> Array2DataT<DataType>::
65Array2DataT(
const Array2DataT<DataType>& rhs)
66: m_value(AlignedMemoryAllocator::Simd())
68, m_internal(new Impl(this))
69, m_allocation_info(rhs.m_allocation_info)
71 m_value = rhs.m_value;
77template<
typename DataType> Array2DataT<DataType>::
78Array2DataT(
const DataStorageBuildInfo& dsbi)
79: m_value(dsbi.memoryAllocator())
80, m_trace(dsbi.traceMng())
81, m_internal(new Impl(this))
88template<
typename DataType> Array2DataT<DataType>::
100template<
typename DataType> DataStorageTypeInfo Array2DataT<DataType>::
101staticStorageTypeInfo()
103 typedef DataTypeTraitsT<DataType> TraitsType;
105 Int32 nb_basic_type = TraitsType::nbBasicType();
108 return DataStorageTypeInfo(bdt,nb_basic_type,dimension,multi_tag);
117 return staticStorageTypeInfo();
150 const Byte*
bt =
reinterpret_cast<const Byte*
>(m_value.to1DSpan().data());
153 dimensions.resize(2);
154 dimensions[0] = m_value.dim1Size();
155 dimensions[1] = m_value.dim2Size();
180 Int64 dim1_size =
sdata->extents()[0];
181 Int64 dim2_size =
sdata->extents()[1];
186 m_value.resize(dim1_size,dim2_size);
187 m_shape =
sdata->shape();
200 ARCANE_UNUSED(
sdata);
215 if (mode==ISerializer::ModeReserve){
221 sbuf->reserveSpan(eBasicDataType::Int64,4);
226 else if (mode==ISerializer::ModePut){
227 Int64 count = m_value.dim1Size();
228 Int64 total = m_value.totalNbElement();
231 n[1] = m_value.dim2Size();
235 BasicType*
bt =
reinterpret_cast<BasicType*
>(m_value.to1DSpan().data());
240 else if (mode==ISerializer::ModeGet){
241 Int64 n[4] = { 0, 0, 0, 0 };
244 Int64 dim2_size = n[1];
248 switch(
sbuf->readMode()){
249 case ISerializer::ReadReplace:
252 m_value.resize(count,dim2_size);
255 BasicType*
bt =
reinterpret_cast<BasicType*
>(m_value.to1DSpan().data());
260 case ISerializer::ReadAdd:
270 BasicType*
bt =
reinterpret_cast<BasicType*
>(m_value.to1DSpan().data()+
current_total);
291 if (mode==ISerializer::ModeReserve){
297 sbuf->reserveSpan(eBasicDataType::Int64,4);
299 Int64
total_nb_value = ((Int64)ids.size()) * ((Int64)m_value.dim2Size());
303 else if (mode==ISerializer::ModePut){
304 Int32 count = ids.size();
305 Int64 dim2_size = m_value.dim2Size();
309 n[0] = m_value.dim1Size();
310 n[1] = m_value.dim2Size();
323 for( Int32 i=0, is=count; i<is; ++i ){
324 const BasicType*
sub_a =
reinterpret_cast<const BasicType*
>(m_value[ids[i]].data());
333 else if (mode==ISerializer::ModeGet){
334 switch(
sbuf->readMode()){
335 case ISerializer::ReadReplace:
337 Int64 n[4] = { 0, 0, 0, 0 };
340 Int64 dim2_size = n[1];
341 Int32 count = CheckedConvert::toInt32(n[2]);
342 Int64 total = count * dim2_size;
357 ARCANE_FATAL(
"serialized data should have the same dim2Size current={0} found={1}",
360 m_value.resize(m_value.dim1Size(),dim2_size);
378 for( Int32 i=0, n=count; i<n; ++i ){
380 for( Int64 z=0,
iz=dim2_size; z<
iz; ++z ){
395 for( Int32 i=0, n=count; i<n; ++i ){
397 for( Int64 z=0,
iz=dim2_size; z<
iz; ++z ){
405 case ISerializer::ReadAdd:
418 m_value.fill(DataType());
427 m_value.setDebugName(name);
442 const Byte*
ptr =
reinterpret_cast<const Byte*
>(values.data());
448 dimensions[0] = m_value.dim1Size();
449 dimensions[1] = m_value.dim2Size();
450 ptr =
reinterpret_cast<const Byte*
>(dimensions.data());
451 Int64
array_len = dimensions.size() *
sizeof(Int64);
467 dimensions[0] = m_value.dim1Size();
468 dimensions[1] = m_value.dim2Size();
473 context->
updateHash(asBytes(m_value.to1DSpan()));
515 if (m_allocation_info==v)
517 m_allocation_info = v;
518 m_value.setMemoryLocationHint(v.memoryLocationHint());
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Donnée tableau bi-dimensionnel d'un type DataType.
void resize(Integer new_size) override
Redimensionne la donnée.
Tableau d'items de types quelconques.
Informations sur l'allocation d'une donnée.
Informations pour le calcul du hash d'une donnée.
Informations de type pour un conteneur de données.
Interface d'une opération sur 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 d'une donnée sérialisée.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Exception lorsqu'un argument est invalide.
Vue constante d'un tableau de type T.
Interface d'un sérialiseur.
eMode
Mode de fonctionnement du sérialiseur.
Options pour configurer les allocations.
Exception lorsqu'une fonction n'est pas implémentée.
Chaîne de caractères unicode.
-*- 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.
eBasicDataType
Type d'une donnée de base.