12#ifndef ARCCORE_BASE_SPAN_H
13#define ARCCORE_BASE_SPAN_H
49template <
typename T,
typename SizeType>
76template <
typename SizeType>
77class DynamicExtentStorage
79 template <
typename T,
typename SpanSizeType, SpanSizeType SpanExtent>
80 friend class ::Arcane::SpanImpl;
84 explicit constexpr DynamicExtentStorage(SizeType s) noexcept
90 constexpr SizeType size()
const noexcept {
return m_size; }
101 static void _throwBadSize [[noreturn]] (
Int64 wanted_size,
Int64 expected_size);
105template <
typename SizeType, SizeType FixedExtent>
108 template <
typename T,
typename SpanSizeType, SpanSizeType SpanExtent>
109 friend class ::Arcane::SpanImpl;
113 explicit constexpr ExtentStorage([[maybe_unused]] SizeType s)
noexcept
115#if defined(ARCCORE_CHECK) && !defined(ARCCORE_DEVICE_CODE)
116 if (s != FixedExtent)
117 ExtentStorageBase::_throwBadSize(s, FixedExtent);
120 ExtentStorage() =
default;
124 constexpr SizeType size()
const noexcept {
return FixedExtent; }
128 static constexpr SizeType m_size = FixedExtent;
134:
public DynamicExtentStorage<Int32>
136 using BaseClass = DynamicExtentStorage<Int32>;
140 explicit constexpr ExtentStorage(
Int32 s) noexcept
148:
public DynamicExtentStorage<Int64>
150 using BaseClass = DynamicExtentStorage<Int64>;
154 explicit constexpr ExtentStorage(
Int64 s) noexcept
188template <
typename T,
typename SizeType, SizeType Extent>
197 using size_type = SizeType;
198 using ElementType = T;
199 using element_type = ElementType;
200 using value_type =
typename std::remove_cv_t<ElementType>;
201 using const_value_type =
typename std::add_const_t<value_type>;
202 using index_type = SizeType;
203 using difference_type = SizeType;
204 using pointer = ElementType*;
205 using const_pointer =
const ElementType*;
206 using reference = ElementType&;
207 using const_reference =
const ElementType&;
210 using view_type =
typename Impl::ViewTypeT<ElementType>::view_type;
211 using reverse_iterator = std::reverse_iterator<iterator>;
212 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
215 template <
typename X>
216 using is_same_const_type = std::enable_if_t<std::is_same_v<X, T> || std::is_same_v<std::add_const_t<X>, T>>;
218 static constexpr bool IsDynamic = (Extent ==
DynExtent);
230 template <
typename X, SizeType XExtent,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
236 template <SizeType XExtent>
243 constexpr ARCCORE_HOST_DEVICE
SpanImpl(pointer ptr, SizeType asize) noexcept
249 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
250 constexpr ARCCORE_HOST_DEVICE
SpanImpl(std::array<X, N>& from)
256 explicit constexpr ARCCORE_HOST_DEVICE
SpanImpl(T* ptr)
requires(!IsDynamic)
261 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
262 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
273 static constexpr ThatClass
create(pointer ptr, SizeType asize)
noexcept
275 return ThatClass(ptr, asize);
285 constexpr ARCCORE_HOST_DEVICE reference
operator[](SizeType i)
const
287 ARCCORE_CHECK_AT(i,
m_size.m_size);
296 constexpr ARCCORE_HOST_DEVICE reference
operator()(SizeType i)
const
298 ARCCORE_CHECK_AT(i,
m_size.m_size);
307 constexpr ARCCORE_HOST_DEVICE reference
item(SizeType i)
const
309 ARCCORE_CHECK_AT(i,
m_size.m_size);
318 constexpr ARCCORE_HOST_DEVICE
void setItem(SizeType i, const_reference v)
noexcept
320 ARCCORE_CHECK_AT(i,
m_size.m_size);
325 constexpr ARCCORE_HOST_DEVICE SizeType
size() const noexcept {
return m_size.m_size; }
327 constexpr ARCCORE_HOST_DEVICE SizeType
sizeBytes() const noexcept
330 return static_cast<SizeType
>(
m_size.m_size *
sizeof(value_type));
333 constexpr ARCCORE_HOST_DEVICE SizeType
length() const noexcept {
return m_size.m_size; }
338 constexpr ARCCORE_HOST_DEVICE iterator
begin() const noexcept {
return iterator(
m_ptr); }
342 constexpr ARCCORE_HOST_DEVICE iterator
end() const noexcept {
return iterator(
m_ptr +
m_size.m_size); }
344 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rbegin() const noexcept {
return std::make_reverse_iterator(
end()); }
346 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rend() const noexcept {
return std::make_reverse_iterator(
begin()); }
351 ARCCORE_DEPRECATED_REASON(
"Y2023: Utilisez begin()/end() à la place")
360 constexpr ARCCORE_HOST_DEVICE pointer
ptrAt(SizeType index)
const
362 ARCCORE_CHECK_AT(index,
m_size.m_size);
363 return m_ptr + index;
367 constexpr ARCCORE_HOST_DEVICE
reference at(SizeType i)
const
374 constexpr ARCCORE_HOST_DEVICE
void setAt(
SizeType i, const_reference value)
381 ARCCORE_HOST_DEVICE
inline void fill(T o)
383 for (SizeType i = 0, n =
m_size.m_size; i < n; ++i)
393 return view_type(s,
m_ptr);
412 constexpr ARCCORE_HOST_DEVICE SubSpanType
subSpan(SizeType abegin, SizeType asize)
const
414 if (abegin >=
m_size.m_size)
416 asize = _min(asize,
m_size.m_size - abegin);
417 return {
m_ptr + abegin, asize };
424 constexpr ARCCORE_HOST_DEVICE SubSpanType
subPart(SizeType abegin, SizeType asize)
const
436 ARCCORE_DEPRECATED_REASON(
"Y2023: utilisez subSpan() à la place")
437 constexpr SubSpanType
subView(SizeType abegin, SizeType asize)
const
443 constexpr ARCCORE_HOST_DEVICE SubSpanType
subspan(SizeType abegin, SizeType asize)
const
449 ARCCORE_DEPRECATED_REASON(
"Y2023: utilisez subSpanInterval() à la place")
452 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
458 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
464 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
475 template <
class U> ARCCORE_HOST_DEVICE
void copy(
const U& copy_array)
477 Int64 n = copy_array.size();
480 const_pointer copy_begin = copy_array.data();
481 pointer to_ptr =
m_ptr;
484 SizeType n_as_sizetype =
static_cast<SizeType
>(n);
485 for (SizeType i = 0; i < n_as_sizetype; ++i)
486 to_ptr[i] = copy_begin[i];
490 constexpr ARCCORE_HOST_DEVICE
bool empty() const noexcept {
return m_size.m_size == 0; }
492 ARCCORE_HOST_DEVICE
bool contains(const_reference v)
const
494 for (SizeType i = 0; i <
m_size.m_size; ++i) {
507 std::optional<SizeType>
findFirst(const_reference v)
const
509 for (SizeType i = 0; i <
m_size.m_size; ++i) {
518 constexpr ARCCORE_HOST_DEVICE
void setArray(
const ArrayView<T>& v)
noexcept
523 constexpr ARCCORE_HOST_DEVICE
void setArray(
const Span<T>& v)
noexcept
537 constexpr ARCCORE_HOST_DEVICE pointer
data() const noexcept {
return m_ptr; }
540 template <
typename X, SizeType Extent2,
typename = std::enable_if_t<std::is_same_v<X, value_type>>>
friend bool
547 template <
typename X, SizeType Extent2,
typename = std::enable_if_t<std::is_same_v<X, value_type>>>
friend bool
554 template <SizeType Extent2>
friend bool
561 template <SizeType Extent2>
friend bool
567 friend inline std::ostream& operator<<(std::ostream& o,
const ThatClass& val)
581 constexpr void _setArray(pointer v, SizeType s)
noexcept
607 ARCCORE_NO_UNIQUE_ADDRESS ExtentStorageType
m_size;
610 static constexpr SizeType _min(SizeType a, SizeType b)
612 return ((a < b) ? a : b);
630template <
typename T, Int64 Extent>
638 using size_type =
Int64;
639 using value_type =
typename BaseClass::value_type;
640 using pointer =
typename BaseClass::pointer;
641 template <
typename X>
642 using is_same_const_type = std::enable_if_t<std::is_same_v<X, T> || std::is_same_v<std::add_const_t<X>, T>>;
643 static constexpr bool IsDynamic = (Extent ==
DynExtent);
651 : BaseClass(from.m_ptr, from.m_size)
655 template <
typename X,
typename = std::enable_if_t<std::is_same_v<X, value_type>>>
657 : BaseClass(from.m_ptr, from.m_size)
660 template <
typename X, Int64 XExtent,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
665 template <
typename X, Int32 XExtent,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
666 constexpr ARCCORE_HOST_DEVICE
Span(
const SmallSpan<X, XExtent>& from) noexcept
667 : BaseClass(from.data(), from.size())
669 template <Int64 XExtent>
673 template <Int32 XExtent>
675 : BaseClass(from.data(), from.size())
679 constexpr ARCCORE_HOST_DEVICE
Span(pointer ptr,
Int64 asize) noexcept
680 : BaseClass(ptr, asize)
684 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
685 constexpr ARCCORE_HOST_DEVICE
Span(std::array<X, N>& from) noexcept
686 : BaseClass(from.data(), from.size())
690 explicit constexpr ARCCORE_HOST_DEVICE
Span(T* ptr)
requires(!IsDynamic)
695 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
696 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
noexcept
707 static constexpr ThatClass
create(pointer ptr, size_type asize)
noexcept
709 return ThatClass(ptr, asize);
753 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
759 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
769 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
776 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
779 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
799template <
typename T, Int32 Extent>
807 using size_type =
Int32;
808 using value_type =
typename BaseClass::value_type;
809 using pointer =
typename BaseClass::pointer;
810 template <
typename X>
811 using is_same_const_type = std::enable_if_t<std::is_same_v<X, T> || std::is_same_v<std::add_const_t<X>, T>>;
812 static constexpr bool IsDynamic = (Extent ==
DynExtent);
821 : BaseClass(from.m_ptr, from.m_size)
826 template <typename X, typename = std::enable_if_t<std::is_same<X, value_type>::value>>
828 : BaseClass(from.m_ptr, from.m_size)
832 template <typename X, typename = std::enable_if_t<std::is_same<X, value_type>::value>>
837 template <Int32 XExtent>
844 : BaseClass(ptr, asize)
847 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
848 constexpr ARCCORE_HOST_DEVICE
SmallSpan(std::array<X, N>& from)
853 explicit constexpr ARCCORE_HOST_DEVICE
SmallSpan(T* ptr)
requires(!IsDynamic)
858 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
859 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
869 static constexpr ThatClass
create(pointer ptr, size_type asize)
noexcept
871 return ThatClass(ptr, asize);
915 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
931 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPart() instead")
938 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPartInterval() instead")
941 return Arcane::Impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
956template <
typename T,
typename SizeType>
inline void
959 Arcane::Impl::dumpArray(o, val, max_print);
973template <
typename DataType,
typename IntegerType,
typename SizeType>
inline void
978 const Int64 result_size = indexes.
size();
979 [[maybe_unused]]
const Int64 my_size = values.
size();
980 const DataType* ptr = values.
data();
981 for (
Int64 i = 0; i < result_size; ++i) {
982 IntegerType index = indexes[i];
983 ARCCORE_CHECK_AT(index, my_size);
984 result[i] = ptr[index];
999template <
typename DataType>
inline void
1014template <
typename DataType>
inline void
1026template <
typename DataType,
typename SizeType, SizeType Extent>
1027inline typename Impl::SpanTypeFromSize<const std::byte, SizeType>::SpanType
1030 return {
reinterpret_cast<const std::byte*
>(s.
data()), s.
sizeBytes() };
1036template <
typename DataType>
1037inline SmallSpan<const std::byte>
1046template <
typename DataType>
1047inline SmallSpan<const std::byte>
1062 typename std::enable_if_t<!std::is_const<DataType>::value,
int> = 0>
1063inline typename Impl::SpanTypeFromSize<std::byte, SizeType>::SpanType
1066 return {
reinterpret_cast<std::byte*
>(s.
data()), s.
sizeBytes() };
1074template <
typename DataType>
inline SmallSpan<std::byte>
1085 template <
typename ByteType,
typename DataType, Int64 Extent>
inline Span<DataType>
1086 asSpanInternal(Span<ByteType, Extent> bytes)
1088 Int64 size = bytes.size();
1091 static constexpr Int64 data_type_size =
static_cast<Int64>(
sizeof(DataType));
1092 static_assert(data_type_size > 0,
"Bad datatype size");
1093 ARCCORE_ASSERT((size % data_type_size) == 0, (
"Size is not a multiple of sizeof(DataType)"));
1094 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
1095 return { ptr, size / data_type_size };
1098 template <
typename ByteType,
typename DataType, Int32 Extent>
inline SmallSpan<DataType>
1099 asSmallSpanInternal(SmallSpan<ByteType, Extent> bytes)
1101 Int32 size = bytes.size();
1104 static constexpr Int32 data_type_size =
static_cast<Int32>(
sizeof(DataType));
1105 static_assert(data_type_size > 0,
"Bad datatype size");
1106 ARCCORE_ASSERT((size % data_type_size) == 0, (
"Size is not a multiple of sizeof(DataType)"));
1107 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
1108 return { ptr, size / data_type_size };
1122 return Arcane::Impl::asSpanInternal<std::byte, DataType, Extent>(bytes);
1129template <
typename DataType, Int64 Extent>
inline Span<const DataType>
1132 return Arcane::Impl::asSpanInternal<const std::byte, const DataType, Extent>(bytes);
1139template <
typename DataType, Int32 Extent>
inline SmallSpan<DataType>
1142 return Arcane::Impl::asSmallSpanInternal<std::byte, DataType, Extent>(bytes);
1149template <
typename DataType, Int32 Extent>
inline SmallSpan<const DataType>
1152 return Arcane::Impl::asSmallSpanInternal<const std::byte, const DataType, Extent>(bytes);
1161template <
typename DataType,
size_t SizeType>
inline Span<DataType, SizeType>
1165 return { s.data(), size };
1171template <
typename DataType,
size_t SizeType>
inline SmallSpan<DataType, SizeType>
1175 return { s.data(), size };
1186extern "C++" ARCCORE_BASE_EXPORT
void
1187binaryWrite(std::ostream& ostr,
const Span<const std::byte>& bytes);
1194extern "C++" ARCCORE_BASE_EXPORT
void
1195binaryRead(std::istream& istr,
const Span<std::byte>& bytes);
Types et fonctions associés aux classes ArrayView et ConstArrayView.
Itérateur sur les classes tableau de Arccore.
Intervalle sur les classes tableau de Arccore.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Spécialisation pour le nombre d'éléments connu à la compilation.
Pour avoir le type (SmallSpan ou Span) en fonction de la taille (Int32 ou Int64).
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ SmallSpan< T, DynExtent > subspan(Int32 abegin, Int32 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ SmallSpan< const ConstituentItemType_ > subViewInterval(Int32 index, Int32 nb_interval) const
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from)
Opérateur de recopie.
constexpr __host__ __device__ SmallSpan< T, DynExtent > subSpanInterval(Int32 index, Int32 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ SmallSpan< T, DynExtent > subPart(Int32 abegin, Int32 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
SmallSpan()=default
Construit une vue vide.
constexpr __host__ __device__ SmallSpan(const ArrayView< value_type > &from) noexcept
Constructeur de recopie depuis une autre vue.
constexpr __host__ __device__ SmallSpan(pointer ptr, Int32 asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et contenant asize éléments.
constexpr __host__ __device__ SmallSpan< const ConstituentItemType_ > subView(Int32 abegin, Int32 asize) const
constexpr __host__ __device__ SmallSpan(T *ptr)
Construit une vue depuis un pointeur avec une taille fixe.
static constexpr ThatClass create(pointer ptr, size_type asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et.
constexpr __host__ __device__ SmallSpan< T, DynExtent > subSpan(Int32 abegin, Int32 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ ThatClass subPartInterval(Int32 index, Int32 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ SpanImpl(pointer ptr, SizeType asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et contenant asize éléments.
constexpr __host__ __device__ SpanImpl(const SpanImpl< X, SizeType, XExtent > &from) noexcept
Constructeur de recopie depuis une autre vue.
constexpr view_type smallView()
Vue constante sur cette vue.
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
constexpr SubSpanType subView(SizeType abegin, SizeType asize) const
friend bool operator==(const SpanImpl< T, SizeType, Extent > &rhs, const SpanImpl< X, SizeType, Extent2 > &lhs)
Opérateur d'égalité (valide si T est const mais pas X).
constexpr __host__ __device__ SpanImpl(std::array< X, N > &from)
Construit une vue depuis un std::array.
std::optional< SizeType > findFirst(const_reference v) const
constexpr void _setArray(pointer v, SizeType s) noexcept
Modifie le pointeur et la taille du tableau.
constexpr __host__ __device__ SpanImpl(T *ptr)
Construit une vue depuis un pointeur avec une taille fixe.
constexpr __host__ __device__ pointer data() const noexcept
constexpr __host__ __device__ SizeType length() const noexcept
Nombre d'éléments du tableau.
constexpr __host__ __device__ iterator begin() const noexcept
Itérateur sur le premier élément du tableau.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
constexpr __host__ __device__ pointer ptrAt(SizeType index) const
Adresse du index-ème élément.
constexpr __host__ __device__ reference operator()(SizeType i) const
i-ème élément du tableau.
constexpr __host__ __device__ reference operator[](SizeType i) const
i-ème élément du tableau.
ArrayRange< pointer > range() const
constexpr __host__ __device__ bool empty() const noexcept
Retourne true si le tableau est vide (dimension nulle).
ARCCORE_NO_UNIQUE_ADDRESS ExtentStorageType m_size
constexpr SubSpanType subViewInterval(SizeType index, SizeType nb_interval) const
constexpr __host__ __device__ SubSpanType subSpan(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ reference item(SizeType i) const
i-ème élément du tableau.
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
friend bool operator==(const SpanImpl< T, SizeType, Extent > &rhs, const SpanImpl< T, SizeType, Extent2 > &lhs)
Opérateur d'égalité
constexpr SubSpanType subPartInterval(SizeType index, SizeType nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
__host__ __device__ bool contains(const_reference v) const
true si le tableau contient l'élément de valeur v
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from)
Opérateur de recopie.
constexpr __host__ __device__ iterator end() const noexcept
Itérateur sur le premier élément après la fin du tableau.
constexpr void _setPtr(pointer v) noexcept
Modifie le pointeur du début du tableau.
friend bool operator!=(const SpanImpl< T, SizeType, Extent > &rhs, const SpanImpl< X, SizeType, Extent2 > &lhs)
Opérateur d'inégalité (valide si T est const mais pas X).
constexpr __host__ __device__ reverse_iterator rend() const noexcept
Itérateur inverse sur le premier élément après la fin du tableau.
constexpr __host__ __device__ SizeType size() const noexcept
constexpr __host__ __device__ SizeType sizeBytes() const noexcept
Retourne la taille du tableau en octets.
constexpr __host__ __device__ reverse_iterator rbegin() const noexcept
Itérateur inverse sur le premier élément du tableau.
friend bool operator!=(const SpanImpl< T, SizeType, Extent > &rhs, const SpanImpl< T, SizeType, Extent2 > &lhs)
Opérateur d'inégalité
constexpr void _setSize(SizeType s) noexcept
Modifie la taille du tableau.
constexpr __host__ __device__ SubSpanType subspan(SizeType abegin, SizeType asize) const
Pour compatibilité avec le C++20.
constexpr __host__ __device__ SubSpanType subPart(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ SpanImpl() noexcept
Construit une vue vide.
constexpr SubSpanType subSpanInterval(SizeType index, SizeType nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ void setItem(SizeType i, const_reference v) noexcept
Positionne le i-ème élément du tableau.
static constexpr ThatClass create(pointer ptr, SizeType asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et.
std::enable_if_t< std::is_same_v< X, T >||std::is_same_v< std::add_const_t< X >, T > > is_same_const_type
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ Span< T, DynExtent > subPart(Int64 abegin, Int64 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ Span< T, DynExtent > subSpanInterval(Int64 index, Int64 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
static constexpr ThatClass create(pointer ptr, size_type asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et.
constexpr __host__ __device__ Span(std::array< X, N > &from) noexcept
Construit une vue à partir d'un std::array.
constexpr __host__ __device__ Span< DataType > subView(Int64 abegin, Int64 asize) const
constexpr __host__ __device__ Span(pointer ptr, Int64 asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et contenant asize éléments.
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from) noexcept
Opérateur de recopie.
constexpr __host__ __device__ Span(T *ptr)
Construit une vue depuis un pointeur avec une taille fixe.
constexpr __host__ __device__ Span(const ArrayView< value_type > &from) noexcept
Constructeur de recopie depuis une autre vue.
Span()=default
Construit une vue vide.
constexpr __host__ __device__ Span< DataType > subViewInterval(Int64 index, Int64 nb_interval) const
constexpr __host__ __device__ Span< T, DynExtent > subPartInterval(Int64 index, Int64 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ Span< T, DynExtent > subSpan(Int64 abegin, Int64 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ Span< T, DynExtent > subspan(Int64 abegin, Int64 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
constexpr __host__ __device__ Integer arccoreCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
constexpr Int32 DynExtent
Constante pour indiquer que la dimension d'un tableau est dynamique.
__host__ __device__ void arccoreCheckAt(Int64 i, Int64 max_size)
Vérifie un éventuel débordement de tableau.
void dumpArray(std::ostream &o, ConstArrayView< T > val, int max_print)
Affiche sur le flot o les valeurs du tableau val.
void sampleSpan(Span< const DataType > values, Span< const Int64 > indexes, Span< DataType > result)
Extrait un sous-tableau à à partir d'une liste d'index.
SmallSpan< DataType > asSmallSpan(SmallSpan< std::byte, Extent > bytes)
Convertit un SmallSpan<std::byte> en un SmallSpan<DataType>.
Span< DataType > asSpan(Span< std::byte, Extent > bytes)
Convertit un Span<std::byte> en un Span<DataType>.
void binaryRead(std::istream &istr, const Span< std::byte > &bytes)
Lit en binaire le contenu de bytes depuis le flot istr.
Impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Convertit la vue en un tableau d'octets non modifiables.
Impl::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Convertit la vue en un tableau d'octets modifiables.
void binaryWrite(std::ostream &ostr, const Span< const std::byte > &bytes)
Ecrit en binaire le contenu de bytes sur le flot ostr.
void _sampleSpan(SpanImpl< const DataType, SizeType > values, SpanImpl< const IntegerType, SizeType > indexes, SpanImpl< DataType, SizeType > result)
Extrait un sous-tableau à à partir d'une liste d'index.
std::int32_t Int32
Type entier signé sur 32 bits.
Espace de nom de Arccore.
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.).