12#ifndef ARCANE_UTILS_MEMORYVIEW_H
13#define ARCANE_UTILS_MEMORYVIEW_H
17#include "arcane/utils/ArrayView.h"
37class ARCANE_UTILS_EXPORT ConstMemoryView
39 friend ARCANE_UTILS_EXPORT ConstMemoryView
45 friend MutableMemoryView;
49 ConstMemoryView() =
default;
52 , m_nb_element(
bytes.size())
55 template <
typename DataType>
explicit constexpr ConstMemoryView(
Span<DataType> v)
59 : ConstMemoryView(v, 1)
73 template <
typename DataType>
constexpr ConstMemoryView(
Span<DataType> v,
Int32 nb_component)
78 : m_nb_element(v.
size())
79 , m_datatype_size(
static_cast<Int32>(
sizeof(DataType)) * nb_component)
82 m_bytes = SpanType(x.data(), x.size() * nb_component);
87 template <
typename DataType>
constexpr ConstMemoryView&
91 m_nb_element = v.
size();
92 m_datatype_size =
static_cast<Int32>(
sizeof(DataType));
100 , m_nb_element(nb_element)
101 , m_datatype_size(datatype_size)
107 constexpr SpanType
bytes()
const {
return m_bytes; }
110 constexpr const std::byte*
data()
const {
return m_bytes.data(); }
121 Int64 byte_offset = begin_index * m_datatype_size;
122 auto sub_bytes = m_bytes.subspan(byte_offset, nb_element * m_datatype_size);
123 return { sub_bytes, m_datatype_size, nb_element };
129 ARCANE_DEPRECATED_REASON(
"Use bytes() instead")
130 SpanType
span()
const {
return m_bytes; }
132 ARCANE_DEPRECATED_REASON(
"Use bytes().size() instead")
133 constexpr
Int64 size()
const {
return m_bytes.size(); }
138 Int64 m_nb_element = 0;
139 Int32 m_datatype_size = 0;
155class ARCANE_UTILS_EXPORT MutableMemoryView
157 friend ARCANE_UTILS_EXPORT MutableMemoryView
166 MutableMemoryView() =
default;
167 explicit constexpr MutableMemoryView(SpanType
bytes)
169 , m_nb_element(
bytes.size())
172 template <
typename DataType>
explicit constexpr MutableMemoryView(
Span<DataType> v)
173 : MutableMemoryView(v, 1)
181 template <
typename DataType>
constexpr MutableMemoryView(
Span<DataType> v,
Int32 nb_component)
182 : m_nb_element(v.
size())
183 , m_datatype_size(
static_cast<Int32>(
sizeof(DataType)) * nb_component)
186 m_bytes = SpanType(x.data(), x.size() * nb_component);
191 template <
typename DataType>
constexpr MutableMemoryView&
195 m_nb_element = v.
size();
196 m_datatype_size =
static_cast<Int32>(
sizeof(DataType));
204 , m_nb_element(nb_element)
205 , m_datatype_size(datatype_size)
210 constexpr operator ConstMemoryView()
const {
return { m_bytes, m_datatype_size, m_nb_element }; }
215 constexpr SpanType
bytes()
const {
return m_bytes; }
218 constexpr std::byte*
data()
const {
return m_bytes.data(); }
229 Int64 byte_offset = begin_index * m_datatype_size;
230 auto sub_bytes = m_bytes.subspan(byte_offset, nb_element * m_datatype_size);
231 return { sub_bytes, m_datatype_size, nb_element };
236 ARCANE_DEPRECATED_REASON(
"Use bytes() instead")
237 constexpr SpanType span()
const {
return m_bytes; }
239 ARCANE_DEPRECATED_REASON(
"Use bytes().size() instead")
240 constexpr Int64 size()
const {
return m_bytes.size(); }
245 Int64 m_nb_element = 0;
246 Int32 m_datatype_size = 0;
258class ARCANE_UTILS_EXPORT ConstMultiMemoryView
264 , m_datatype_size(datatype_size)
267 : m_datatype_size(datatype_size)
270 m_views = { ptr,
views.size() };
282 Int32 m_datatype_size;
294class ARCANE_UTILS_EXPORT MutableMultiMemoryView
300 , m_datatype_size(datatype_size)
314 Int32 m_datatype_size;
324template <
typename DataType> ConstMemoryView
331template <
typename DataType> ConstMemoryView
341template <
typename DataType> MutableMemoryView
351template <
typename DataType> MutableMemoryView
368extern "C++" ARCANE_UTILS_EXPORT MutableMemoryView
382extern "C++" ARCANE_UTILS_EXPORT ConstMemoryView
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr ConstMemoryView subView(Int64 begin_index, Int64 nb_element) const
Sous-vue à partir de l'indice begin_index et contenant nb_element.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
SpanType span() const
Vue convertie en un Span.
friend ConstMemoryView makeConstMemoryView(const void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire en lecture seule.
constexpr SpanType bytes() const
Vue sous forme d'octets.
constexpr const std::byte * data() const
Pointeur sur la zone mémoire.
constexpr Int64 nbElement() const
Nombre d'éléments.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr SmallSpan< const Span< const std::byte > > views() const
Vues en octets sur la zone mémoire.
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr Int64 nbElement() const
Nombre d'éléments.
constexpr std::byte * data() const
Pointeur sur la zone mémoire.
friend MutableMemoryView makeMutableMemoryView(void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire modifiable.
constexpr MutableMemoryView subView(Int64 begin_index, Int64 nb_element) const
Sous-vue à partir de l'indice begin_index.
constexpr SpanType bytes() const
Vue sous forme d'octets.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr SmallSpan< Span< std::byte > > views() const
Vues en octets sur la zone mémoire.
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Vue d'un tableau d'éléments de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
impl::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets modifiables.
MutableMemoryView makeMutableMemoryView(void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire modifiable.
std::int64_t Int64
Type entier signé sur 64 bits.
ConstMemoryView makeConstMemoryView(const void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire en lecture seule.
impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
ConstMemoryView makeMemoryView(Span< DataType > v)
Créé une vue mémoire constante à partir d'un Span.
std::int32_t Int32
Type entier signé sur 32 bits.