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());
Class representing a classic 2D array.
Span< DataType > to1DSpan()
View of the array as a 1D array.
void resize(Int64 new_size)
Resizes only the first dimension, leaving the second dimension unchanged.
Base class for 1D data vectors.
Base class for multidimensional views.
Multi-dimensional arrays for numerical types accessible on accelerators.
void getSpan(Span2< Type > values) const
Retrieve the array values.
void reserveArray(Span2< const Type > values) const
Reserve to save the number of elements and the values elements.
SerializerExtension(ISerializer *serializer)
Constructor.
void putArray(Span2< const Type > values) const
Save the number of elements and the values elements.
void reserveSpan(Span2< const Type > values) const
Reserve for a view of values elements.
void getArray(Array2< Type > &values) const
Resize and fill values.
void putSpan(Span2< const Type > values) const
Add the array values.
constexpr __host__ __device__ ElementType * data()
Pointer to the allocated memory.
constexpr __host__ __device__ SizeType dim2Size() const
Number of elements in the second dimension.
constexpr __host__ __device__ SizeType dim1Size() const
Number of elements in the first dimension.
View for a 2D array whose size is an 'Int64'.
View of an array of elements of type T.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Signed integer type of 64 bits.
std::int32_t Int32
Signed integer type of 32 bits.