12#ifndef ARCCORE_BASE_SPAN_H
13#define ARCCORE_BASE_SPAN_H
17#include "arccore/base/ArrayView.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; }
98template <
typename SizeType, SizeType FixedExtent>
101 template <
typename T,
typename SpanSizeType, SpanSizeType SpanExtent>
102 friend class ::Arcane::SpanImpl;
106 explicit constexpr ExtentStorage(SizeType)
noexcept {}
110 constexpr SizeType size()
const noexcept {
return FixedExtent; }
114 static constexpr SizeType m_size = FixedExtent;
120:
public DynamicExtentStorage<Int32>
122 using BaseClass = DynamicExtentStorage<Int32>;
126 explicit constexpr ExtentStorage(
Int32 s) noexcept
134:
public DynamicExtentStorage<Int64>
136 using BaseClass = DynamicExtentStorage<Int64>;
140 explicit constexpr ExtentStorage(
Int64 s) noexcept
174template <
typename T,
typename SizeType, SizeType Extent>
183 using size_type = SizeType;
184 using ElementType = T;
185 using element_type = ElementType;
186 using value_type =
typename std::remove_cv_t<ElementType>;
187 using const_value_type =
typename std::add_const_t<value_type>;
188 using index_type = SizeType;
189 using difference_type = SizeType;
190 using pointer = ElementType*;
191 using const_pointer =
const ElementType*;
192 using reference = ElementType&;
193 using const_reference =
const ElementType&;
196 using view_type =
typename Impl::ViewTypeT<ElementType>::view_type;
197 using reverse_iterator = std::reverse_iterator<iterator>;
198 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
201 template <
typename X>
202 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>>;
214 template <
typename X, SizeType XExtent,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
217 , m_size(from.size())
220 template <SizeType XExtent>
223 , m_size(from.size())
227 constexpr ARCCORE_HOST_DEVICE
SpanImpl(pointer ptr, SizeType asize) noexcept
233 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
234 constexpr ARCCORE_HOST_DEVICE
SpanImpl(std::array<X, N>& from)
240 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
241 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
252 static constexpr ThatClass
create(pointer ptr, SizeType asize)
noexcept
254 return ThatClass(ptr, asize);
264 constexpr ARCCORE_HOST_DEVICE reference
operator[](SizeType i)
const
266 ARCCORE_CHECK_AT(i, m_size.m_size);
275 constexpr ARCCORE_HOST_DEVICE reference
operator()(SizeType i)
const
277 ARCCORE_CHECK_AT(i, m_size.m_size);
286 constexpr ARCCORE_HOST_DEVICE reference
item(SizeType i)
const
288 ARCCORE_CHECK_AT(i, m_size.m_size);
297 constexpr ARCCORE_HOST_DEVICE
void setItem(SizeType i, const_reference v)
noexcept
299 ARCCORE_CHECK_AT(i, m_size.m_size);
304 constexpr ARCCORE_HOST_DEVICE SizeType
size() const noexcept {
return m_size.m_size; }
306 constexpr ARCCORE_HOST_DEVICE SizeType
sizeBytes() const noexcept
309 return static_cast<SizeType
>(m_size.m_size *
sizeof(value_type));
312 constexpr ARCCORE_HOST_DEVICE SizeType
length() const noexcept {
return m_size.m_size; }
317 constexpr ARCCORE_HOST_DEVICE iterator
begin() const noexcept {
return iterator(m_ptr); }
321 constexpr ARCCORE_HOST_DEVICE iterator
end() const noexcept {
return iterator(m_ptr + m_size.m_size); }
323 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rbegin() const noexcept {
return std::make_reverse_iterator(
end()); }
325 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rend() const noexcept {
return std::make_reverse_iterator(
begin()); }
330 ARCCORE_DEPRECATED_REASON(
"Y2023: Use begin()/end() instead")
339 constexpr ARCCORE_HOST_DEVICE pointer
ptrAt(SizeType index)
const
341 ARCCORE_CHECK_AT(index, m_size.m_size);
342 return m_ptr + index;
346 constexpr ARCCORE_HOST_DEVICE
reference at(SizeType i)
const
353 constexpr ARCCORE_HOST_DEVICE
void setAt(SizeType i, const_reference value)
360 ARCCORE_HOST_DEVICE
inline void fill(T o)
362 for (SizeType i = 0, n = m_size.m_size; i < n; ++i)
372 return view_type(s, m_ptr);
391 constexpr ARCCORE_HOST_DEVICE SubSpanType
subSpan(SizeType abegin, SizeType asize)
const
393 if (abegin >= m_size.m_size)
395 asize = _min(asize, m_size.m_size - abegin);
396 return { m_ptr + abegin, asize };
403 constexpr ARCCORE_HOST_DEVICE SubSpanType
subPart(SizeType abegin, SizeType asize)
const
415 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
416 constexpr SubSpanType
subView(SizeType abegin, SizeType asize)
const
422 constexpr ARCCORE_HOST_DEVICE SubSpanType
subspan(SizeType abegin, SizeType asize)
const
428 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
431 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
437 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
443 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
454 template <
class U> ARCCORE_HOST_DEVICE
void copy(
const U& copy_array)
456 Int64 n = copy_array.size();
457 Int64 size_as_int64 = m_size.m_size;
459 const_pointer copy_begin = copy_array.data();
460 pointer to_ptr = m_ptr;
463 SizeType n_as_sizetype =
static_cast<SizeType
>(n);
464 for (SizeType i = 0; i < n_as_sizetype; ++i)
465 to_ptr[i] = copy_begin[i];
469 constexpr ARCCORE_HOST_DEVICE
bool empty() const noexcept {
return m_size.m_size == 0; }
471 ARCCORE_HOST_DEVICE
bool contains(const_reference v)
const
473 for (SizeType i = 0; i < m_size.m_size; ++i) {
486 std::optional<SizeType>
findFirst(const_reference v)
const
488 for (SizeType i = 0; i < m_size.m_size; ++i) {
497 constexpr ARCCORE_HOST_DEVICE
void setArray(
const ArrayView<T>& v)
noexcept
502 constexpr ARCCORE_HOST_DEVICE
void setArray(
const Span<T>& v)
noexcept
516 constexpr ARCCORE_HOST_DEVICE pointer
data() const noexcept {
return m_ptr; }
519 template <
typename X, SizeType Extent2,
typename = std::enable_if_t<std::is_same_v<X, value_type>>>
friend bool
526 template <
typename X, SizeType Extent2,
typename = std::enable_if_t<std::is_same_v<X, value_type>>>
friend bool
533 template <SizeType Extent2>
friend bool
540 template <SizeType Extent2>
friend bool
546 friend inline std::ostream&
operator<<(std::ostream& o,
const ThatClass& val)
560 constexpr void _setArray(pointer v, SizeType s)
noexcept
572 constexpr void _setPtr(pointer v)
noexcept { m_ptr = v; }
580 constexpr void _setSize(SizeType s)
noexcept { m_size = ExtentStorageType(s); }
586 [[no_unique_address]] ExtentStorageType m_size;
590 static constexpr SizeType _min(SizeType a, SizeType b)
592 return ((a < b) ? a : b);
609template <
typename T, Int64 Extent>
617 using size_type =
Int64;
618 using value_type =
typename BaseClass::value_type;
619 using pointer =
typename BaseClass::pointer;
620 template <
typename X>
621 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>>;
629 : BaseClass(from.m_ptr, from.m_size)
633 template <
typename X,
typename = std::enable_if_t<std::is_same_v<X, value_type>>>
635 : BaseClass(from.m_ptr, from.m_size)
638 template <
typename X, Int64 XExtent,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
643 template <
typename X, Int32 XExtent,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
644 constexpr ARCCORE_HOST_DEVICE
Span(
const SmallSpan<X, XExtent>& from) noexcept
645 : BaseClass(from.data(), from.size())
647 template <Int64 XExtent>
651 template <Int32 XExtent>
653 : BaseClass(from.data(), from.size())
657 constexpr ARCCORE_HOST_DEVICE
Span(pointer ptr,
Int64 asize) noexcept
658 : BaseClass(ptr, asize)
662 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
663 constexpr ARCCORE_HOST_DEVICE
Span(std::array<X, N>& from) noexcept
664 : BaseClass(from.data(), from.size())
668 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
669 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
noexcept
680 static constexpr ThatClass
create(pointer ptr, size_type asize)
noexcept
682 return ThatClass(ptr, asize);
726 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
732 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
742 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
749 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
752 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
771template <
typename T, Int32 Extent>
779 using size_type =
Int32;
780 using value_type =
typename BaseClass::value_type;
781 using pointer =
typename BaseClass::pointer;
782 template <
typename X>
783 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>>;
792 : BaseClass(from.m_ptr, from.m_size)
797 template <typename X, typename = std::enable_if_t<std::is_same<X, value_type>::value>>
799 : BaseClass(from.m_ptr, from.m_size)
803 template <typename X, typename = std::enable_if_t<std::is_same<X, value_type>::value>>
808 template <Int32 XExtent>
815 : BaseClass(ptr, asize)
818 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
819 constexpr ARCCORE_HOST_DEVICE
SmallSpan(std::array<X, N>& from)
824 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
825 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
835 static constexpr ThatClass
create(pointer ptr, size_type asize)
noexcept
837 return ThatClass(ptr, asize);
881 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
897 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPart() instead")
904 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPartInterval() instead")
907 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
921template <
typename T,
typename SizeType>
inline void
924 impl::dumpArray(o, val, max_print);
937template <
typename DataType,
typename IntegerType,
typename SizeType>
inline void
942 const Int64 result_size = indexes.
size();
943 [[maybe_unused]]
const Int64 my_size = values.
size();
944 const DataType* ptr = values.
data();
945 for (
Int64 i = 0; i < result_size; ++i) {
946 IntegerType index = indexes[i];
947 ARCCORE_CHECK_AT(index, my_size);
948 result[i] = ptr[index];
962template <
typename DataType>
inline void
976template <
typename DataType>
inline void
987template <
typename DataType,
typename SizeType, SizeType Extent>
988inline typename Impl::SpanTypeFromSize<const std::byte, SizeType>::SpanType
991 return {
reinterpret_cast<const std::byte*
>(s.
data()), s.
sizeBytes() };
997template <
typename DataType>
998inline SmallSpan<const std::byte>
1007template <
typename DataType>
1008inline SmallSpan<const std::byte>
1021template <
typename DataType,
typename SizeType, SizeType Extent,
1022 typename std::enable_if_t<!std::is_const<DataType>::value,
int> = 0>
1023inline typename Impl::SpanTypeFromSize<std::byte, SizeType>::SpanType
1026 return {
reinterpret_cast<std::byte*
>(s.
data()), s.
sizeBytes() };
1034template <
typename DataType>
inline SmallSpan<std::byte>
1046 template <
typename ByteType,
typename DataType, Int64 Extent>
inline Span<DataType>
1047 asSpanInternal(Span<ByteType, Extent> bytes)
1049 Int64 size = bytes.
size();
1052 static constexpr Int64 data_type_size =
static_cast<Int64>(
sizeof(DataType));
1053 static_assert(data_type_size > 0,
"Bad datatype size");
1054 ARCCORE_ASSERT((size % data_type_size) == 0, (
"Size is not a multiple of sizeof(DataType)"));
1055 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
1056 return { ptr, size / data_type_size };
1059 template <
typename ByteType,
typename DataType, Int32 Extent>
inline SmallSpan<DataType>
1060 asSmallSpanInternal(SmallSpan<ByteType, Extent> bytes)
1062 Int32 size = bytes.size();
1065 static constexpr Int32 data_type_size =
static_cast<Int32>(
sizeof(DataType));
1066 static_assert(data_type_size > 0,
"Bad datatype size");
1067 ARCCORE_ASSERT((size % data_type_size) == 0, (
"Size is not a multiple of sizeof(DataType)"));
1068 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
1069 return { ptr, size / data_type_size };
1083 return impl::asSpanInternal<std::byte, DataType, Extent>(bytes);
1089template <
typename DataType, Int64 Extent>
inline Span<const DataType>
1092 return impl::asSpanInternal<const std::byte, const DataType, Extent>(bytes);
1098template <
typename DataType, Int32 Extent>
inline SmallSpan<DataType>
1101 return impl::asSmallSpanInternal<std::byte, DataType, Extent>(bytes);
1107template <
typename DataType, Int32 Extent>
inline SmallSpan<const DataType>
1110 return impl::asSmallSpanInternal<const std::byte, const DataType, Extent>(bytes);
1118template <
typename DataType,
size_t SizeType>
inline Span<DataType, SizeType>
1122 return { s.data(), size };
1127template <
typename DataType,
size_t SizeType>
inline SmallSpan<DataType, SizeType>
1131 return { s.data(), size };
1141extern "C++" ARCCORE_BASE_EXPORT
void
1142binaryWrite(std::ostream& ostr,
const Span<const std::byte>& bytes);
1149extern "C++" ARCCORE_BASE_EXPORT
void
1150binaryRead(std::istream& istr,
const Span<std::byte>& bytes);
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< Pointer > 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< Pointer > subView(Int32 abegin, Int32 asize) const
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__ 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)
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(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)
Converti un SmallSpan<std::byte> en un SmallSpan<DataType>.
Span< DataType > asSpan(Span< std::byte, Extent > bytes)
Converti 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)
Converti la vue en un tableau d'octets non modifiables.
Impl::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets modifiables.
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::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.
void binaryWrite(std::ostream &ostr, const Span< const std::byte > &bytes)
Ecrit en binaire le contenu de bytes sur le flot ostr.
std::int32_t Int32
Type entier signé sur 32 bits.
Espace de nom de Arccore.