12#ifndef ARCCORE_SERIALIZE_SERIALIZEREXTENSION_H
13#define ARCCORE_SERIALIZE_SERIALIZEREXTENSION_H
17#include "arccore/serialize/ISerializer.h"
46 : m_serializer(serializer)
56 template <
class Type,
class Extents>
58 requires(Extents::rank() <= 4);
65 template <
class Type,
class Extents>
67 requires(Extents::rank() <= 4);
79 template <
class Type,
class Extents>
81 requires(Extents::rank() <= 4);
88 template <
class Type,
class Extents>
90 requires(Extents::rank() <= 4);
102 template <
class Type,
class Extents>
104 requires(Extents::rank() <= 4);
107 template <
class Type>
111 template <
class Type,
class Extents>
113 requires(Extents::rank() <= 4);
131 m_serializer->reserveSpan(span_1d);
137template <
class Type,
class Extents>
140requires(Extents::rank() <= 4)
142 m_serializer->reserveSpan(values.to1DSpan());
152 m_serializer->reserveInt64(2);
159template <
class Type,
class Extents>
162requires(Extents::rank() <= 4)
164 constexpr Int32 rank = Extents::rank();
165 m_serializer->reserveInt64(rank);
166 m_serializer->reserveSpan(values.to1DSpan());
177 m_serializer->putSpan(span_1d);
183template <
class Type,
class Extents>
186requires(Extents::rank() <= 4)
188 m_serializer->putSpan(values.to1DSpan());
198 m_serializer->putInt64(values.
dim1Size());
199 m_serializer->putInt64(values.
dim2Size());
206template <
class Type,
class Extents>
209requires(Extents::rank() <= 4)
211 constexpr Int32 rank = Extents::rank();
214 if constexpr (rank >= 1) {
215 m_serializer->putInt64(values.extent0());
217 if constexpr (rank >= 2) {
218 m_serializer->putInt64(values.extent1());
220 if constexpr (rank >= 3) {
221 m_serializer->putInt64(values.extent2());
223 if constexpr (rank >= 4) {
224 m_serializer->putInt64(values.extent3());
226 m_serializer->putSpan(values.to1DSpan());
237 m_serializer->getSpan(span_1d);
243template <
class Type,
class Extents>
246requires(Extents::rank() <= 4)
249 m_serializer->getSpan(values_1d);
259 Int64 size1 = m_serializer->getInt64();
260 Int64 size2 = m_serializer->getInt64();
262 values.
resize(size1, size2);
263 m_serializer->getSpan(values.
to1DSpan());
269template <
class Type,
class Extents>
272requires(Extents::rank() <= 4)
274 using IndexType = Extents::ExtentIndexType;
277 constexpr Int32 rank = Extents::rank();
278 std::array<IndexType, rank> size{};
279 for (
Int32 i = 0; i < rank; ++i) {
280 size[i] =
static_cast<IndexType
>(m_serializer->getInt64());
283 values.resizeDestructive(mdi);
286 m_serializer->getSpan(values.to1DSpan());
Tableau 2D d'items de types quelconques.
Span< DataType > to1DSpan()
Vue du tableau sous forme de tableau 1D.
void resize(Integer size)
Redimensionnement de la deuxième dimension du tableau.
Tableau d'items de types quelconques.
Interface d'un sérialiseur.
Classe de base des vues multi-dimensionnelles.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
void getSpan(Span2< Type > values) const
Récupère le tableau values.
void reserveArray(Span2< const Type > values) const
Réserve pour sauver le nombre d'éléments et les values éléments.
SerializerExtension(ISerializer *serializer)
Constructeur.
void putArray(Span2< const Type > values) const
Sauve le nombre d'éléments et les values éléments.
void reserveSpan(Span2< const Type > values) const
Réserve pour une vue de values éléments.
void getArray(Array2< Type > &values) const
Redimensionne et remplit values.
void putSpan(Span2< const Type > values) const
Ajoute le tableau values.
constexpr __host__ __device__ ElementType * data()
Pointeur sur la mémoire allouée.
constexpr __host__ __device__ SizeType dim2Size() const
Nombre d'éléments de la deuxième dimension.
constexpr __host__ __device__ SizeType dim1Size() const
Nombre d'éléments de la première dimension.
Vue pour un tableau 2D dont la taille est un 'Int64'.
Vue d'un tableau d'éléments de type T.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.