14#include "arcane/ISerializedData.h"
18#include "arcane/utils/Ref.h"
19#include "arcane/utils/NotImplementedException.h"
20#include "arcane/utils/NotSupportedException.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/IHashAlgorithm.h"
23#include "arcane/utils/CheckedConvert.h"
24#include "arcane/utils/Array.h"
25#include "arcane/utils/ArrayShape.h"
27#include "arcane/ISerializer.h"
37 const Int64 SERIALIZE_MAGIC_NUMBER = 0x6b90ac81;
50 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
62 Integer
nbDimension()
const override {
return m_nb_dimension; }
63 Int64
nbElement()
const override {
return m_nb_element; }
65 Int64
memorySize()
const override {
return m_memory_size; }
71 Span<const Byte> bytes()
const override {
return m_const_buffer; }
73 Span<Byte> bytes()
override {
return m_buffer; }
96 Integer m_nb_dimension;
98 Int64 m_nb_base_element;
105 Int64 m_element_size;
115 void _copyExtentsToDimensions();
127, m_nb_base_element(0)
128, m_is_multi_size(false)
138 Integer nb_dimension,
Int64 nb_element,
Int64 nb_base_element,
140: m_base_data_type(base_data_type)
141, m_memory_size(memory_size)
142, m_nb_dimension(nb_dimension)
143, m_nb_element(nb_element)
144, m_nb_base_element(nb_base_element)
145, m_is_multi_size(is_multi_size)
150 _copyExtentsToDimensions();
152 if (nb_dimension == 1) {
156 else if (nb_dimension > 1) {
158 for (
Int32 i = 1; i < nb_dimension; ++i)
168_copyExtentsToDimensions()
177 for (Integer i = 0; i < n; ++i)
178 m_dimensions[i] =
static_cast<Int32>(m_extents[i]);
206 m_const_buffer = buffer;
207 m_stored_buffer.
clear();
208 m_memory_size = buffer.size();
217 m_const_buffer = buffer;
219 m_stored_buffer.
clear();
220 m_memory_size = buffer.size();
230 m_buffer = m_stored_buffer;
231 m_const_buffer = m_stored_buffer.
view();
232 m_memory_size = size;
242 algo->computeHash64(m_const_buffer, output);
272 case ISerializer::ModeReserve:
279 switch (
sbuf->readMode()) {
281 _serializeRead(
sbuf);
301 Int32 version =
sbuf->getInt32();
306 m_memory_size =
sbuf->getInt64();
307 m_nb_dimension =
sbuf->getInteger();
308 m_nb_element =
sbuf->getInt64();
309 m_nb_base_element =
sbuf->getInt64();
310 m_is_multi_size =
sbuf->getInteger();
311 m_element_size =
sbuf->getInt64();
316 sbuf->getSpan(m_extents);
317 _copyExtentsToDimensions();
328 sbuf->getSpan(m_stored_buffer);
329 m_buffer = m_stored_buffer;
330 m_const_buffer = m_buffer;
345 if (m_extents.
size() != m_dimensions.
size())
346 ARCANE_FATAL(
"Incoherence between extents ({0}) and dimensions ({1})",
347 m_extents.
size(), m_dimensions.
size());
350 case ISerializer::ModeReserve:
353 sbuf->reserveInteger(1);
355 sbuf->reserveInteger(1);
358 sbuf->reserveInteger(1);
373 sbuf->putInteger(m_base_data_type);
374 sbuf->putInt64(m_memory_size);
375 sbuf->putInteger(m_nb_dimension);
376 sbuf->putInt64(m_nb_element);
377 sbuf->putInt64(m_nb_base_element);
378 sbuf->putInteger(m_is_multi_size);
379 sbuf->putInt64(m_element_size);
382 sbuf->putSpan(m_extents);
387 sbuf->putInt64(m_const_buffer.
size());
388 sbuf->putSpan(m_const_buffer);
398extern "C++" ARCANE_CORE_EXPORT
411extern "C++" ARCANE_CORE_EXPORT
424extern "C++" ARCANE_CORE_EXPORT
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
void setNbDimension(Int32 nb_value)
Positionne le rang de la forme.
void setDimension(Int32 index, Int32 value)
Positionne la valeur de la index-ème dimension à value.
Int32 nbDimension() const
Rang de la forme.
SmallSpan< const Int32 > dimensions() const
Valeurs de chaque dimension.
void setDimensions(Span< const Int32 > dims)
Positionne le nombre et la valeur des dimensions.
Tableau d'items de types quelconques.
Interface d'un algorithme de hashage.
Interface d'une donnée sérialisée.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Interface d'une donnée sérialisée.
void serialize(ISerializer *buffer) override
Serialize en lecture ou écriture la donnée.
void computeHash(IHashAlgorithm *algo, ByteArray &output) const override
Calcul une clé de hashage sur cette donnée.
Int64ConstArrayView extents() const override
Tableau contenant le nombre d'éléments pour chaque dimension.
Span< Byte > writableBytes() override
Vue sur les valeurs sérialisées.
void setConstBytes(Span< const Byte > bytes) override
Positionne les valeurs de sérialisation pour la lecture.
void allocateMemory(Int64 size) override
Alloue un tableaux pour contenir les éléments sérialisés.
Integer nbDimension() const override
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, ...
Span< const Byte > constBytes() const override
Valeurs sérialisées.
void _serialize(ISerializer *sbuf) const
Int64 nbBaseElement() const override
Nombre d'éléments du type de base.
void setBytes(Span< Byte > bytes) override
Positionne les valeurs de sérialisation.
eDataType baseDataType() const override
Type de la donnée.
bool isMultiSize() const override
Indique s'il s'agit d'un tableau multi-taille. (pertinent uniquement si nbDimension()>1)
void setWritableBytes(Span< Byte > bytes) override
Positionne les valeurs de sérialisation.
Int64 memorySize() const override
Indique le nombre d'octets qu'il faut allouer pour stocker ou lire les données.
void setBytes(Span< const Byte > bytes) override
Positionne les valeurs de sérialisation.
void setBuffer(ByteArrayView buffer) override
Positionne les valeurs de sérialisation.
Int64 nbElement() const override
Nombre d'éléments.
ArrayShape shape() const override
Forme du tableau associé aux données.
Integer size() const
Nombre d'éléments du vecteur.
Vue modifiable d'un tableau d'un type T.
const T * data() const
Accès à la racine du tableau hors toute protection.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
ArrayView< T > view() const
Vue mutable sur ce tableau.
void clear()
Supprime les éléments du tableau.
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.
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 SizeType size() const noexcept
Retourne la taille du tableau.
constexpr view_type smallView()
Vue constante sur cette vue.
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
Integer multiply(Integer x, Integer y, Integer z)
Multiplie trois 'Integer' et vérifie que le résultat peut être contenu dans un 'Integer'.
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ARCANE_DATATYPE_EXPORT Integer dataTypeSize(eDataType type)
Taille du type de donnée type (qui doit être différent de DT_String)
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.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
ArrayView< Byte > ByteArrayView
Equivalent C d'un tableau à une dimension de caractères.
Ref< ISerializedData > arcaneCreateEmptySerializedDataRef()
Créé des données sérialisées.
eDataType
Type d'une donnée.
@ DT_Int32
Donnée de type entier 32 bits.
@ DT_Int64
Donnée de type entier 64 bits.
@ DT_Unknown
Donnée de type inconnue ou non initialisée.
@ DT_Byte
Donnée de type octet.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Int32 Integer
Type représentant un entier.