12#ifndef ARCCORE_BASE_SPAN_H
13#define ARCCORE_BASE_SPAN_H
17#include "arccore/base/ArrayView.h"
47 template <
typename T,
typename SizeType>
87template<
typename T,
typename SizeType,SizeType Extent,SizeType MinValue>
93 using size_type = SizeType;
94 using ElementType = T;
95 using element_type = ElementType;
96 using value_type =
typename std::remove_cv_t<ElementType>;
97 using const_value_type =
typename std::add_const_t<value_type>;
98 using index_type = SizeType;
99 using difference_type = SizeType;
100 using pointer = ElementType*;
101 using const_pointer =
const ElementType*;
102 using reference = ElementType&;
103 using const_reference =
const ElementType&;
106 using view_type =
typename detail::ViewTypeT<ElementType>::view_type;
107 using reverse_iterator = std::reverse_iterator<iterator>;
108 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
112 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>>;
117 constexpr ARCCORE_HOST_DEVICE
SpanImpl() noexcept : m_ptr(
nullptr), m_size(0) {}
121 template <
typename X, SizeType XExtent, SizeType XMinValue,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
124 , m_size(from.size())
127 template <SizeType XExtent, SizeType XMinValue>
130 , m_size(from.size())
134 constexpr ARCCORE_HOST_DEVICE
SpanImpl(pointer ptr, SizeType asize) noexcept
140 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
141 constexpr ARCCORE_HOST_DEVICE
SpanImpl(std::array<X,N>& from)
145 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
146 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X,N>& from)
157 static constexpr ThatClass
create(pointer ptr,SizeType asize)
noexcept
159 return ThatClass(ptr,asize);
169 constexpr ARCCORE_HOST_DEVICE reference
operator[](SizeType i)
const
171 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
180 constexpr ARCCORE_HOST_DEVICE reference
operator()(SizeType i)
const
182 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
191 constexpr ARCCORE_HOST_DEVICE reference
item(SizeType i)
const
193 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
202 constexpr ARCCORE_HOST_DEVICE
void setItem(SizeType i, const_reference v)
noexcept
204 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
209 constexpr ARCCORE_HOST_DEVICE SizeType
size() const noexcept {
return m_size; }
211 constexpr ARCCORE_HOST_DEVICE SizeType
sizeBytes() const noexcept {
return static_cast<SizeType
>(m_size *
sizeof(value_type)); }
213 constexpr ARCCORE_HOST_DEVICE SizeType
length() const noexcept {
return m_size; }
218 constexpr ARCCORE_HOST_DEVICE iterator
begin() const noexcept {
return iterator(m_ptr); }
222 constexpr ARCCORE_HOST_DEVICE iterator
end() const noexcept {
return iterator(m_ptr+m_size); }
224 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rbegin() const noexcept {
return std::make_reverse_iterator(
end()); }
226 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rend() const noexcept {
return std::make_reverse_iterator(
begin()); }
231 ARCCORE_DEPRECATED_REASON(
"Y2023: Use begin()/end() instead")
240 constexpr ARCCORE_HOST_DEVICE pointer
ptrAt(SizeType index)
const
242 ARCCORE_CHECK_AT(index,m_size);
247 constexpr ARCCORE_HOST_DEVICE reference at(SizeType i)
const
254 constexpr ARCCORE_HOST_DEVICE
void setAt(SizeType i,const_reference value)
261 ARCCORE_HOST_DEVICE
inline void fill(T o)
263 for( SizeType i=0, n=m_size; i<n; ++i )
273 return view_type(s,m_ptr);
292 constexpr ARCCORE_HOST_DEVICE ThatClass
subSpan(SizeType abegin,SizeType asize)
const
296 asize = _min(asize,m_size-abegin);
297 return {m_ptr+abegin,asize};
304 constexpr ARCCORE_HOST_DEVICE ThatClass
subPart(SizeType abegin,SizeType asize)
const
317 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
318 constexpr ThatClass
subView(SizeType abegin,SizeType asize)
const
324 constexpr ARCCORE_HOST_DEVICE ThatClass
subspan(SizeType abegin,SizeType asize)
const
330 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
333 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
339 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
345 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
356 template<
class U> ARCCORE_HOST_DEVICE
359 Int64 n = copy_array.size();
360 Int64 size_as_int64 = m_size;
362 const_pointer copy_begin = copy_array.data();
363 pointer to_ptr = m_ptr;
366 SizeType n_as_sizetype =
static_cast<SizeType
>(n);
367 for( SizeType i=0; i<n_as_sizetype; ++i )
368 to_ptr[i] = copy_begin[i];
372 constexpr ARCCORE_HOST_DEVICE
bool empty() const noexcept {
return m_size==0; }
374 ARCCORE_HOST_DEVICE
bool contains(const_reference v)
const
376 for( SizeType i=0; i<m_size; ++i ){
389 std::optional<SizeType>
findFirst(const_reference v)
const
391 for( SizeType i=0; i<m_size; ++i ){
400 constexpr ARCCORE_HOST_DEVICE
void setArray(
const ArrayView<T>& v)
noexcept
405 constexpr ARCCORE_HOST_DEVICE
void setArray(
const Span<T>& v)
noexcept
419 constexpr ARCCORE_HOST_DEVICE pointer
data() const noexcept {
return m_ptr; }
422 template<
typename X,SizeType Extent2,SizeType MinValue2,
typename = std::enable_if_t<std::is_same_v<X,value_type>>>
friend bool
429 template<
typename X,SizeType Extent2,SizeType MinValue2,
typename = std::enable_if_t<std::is_same_v<X,value_type>>>
friend bool
436 template<SizeType Extent2,SizeType MinValue2>
friend bool
443 template<SizeType Extent2,SizeType MinValue2>
friend bool
449 friend inline std::ostream& operator<<(std::ostream& o,
const ThatClass& val)
463 constexpr void _setArray(pointer v,SizeType s)
noexcept { m_ptr = v; m_size = s; }
471 constexpr void _setPtr(pointer v)
noexcept { m_ptr = v; }
479 constexpr void _setSize(SizeType s)
noexcept { m_size = s; }
488 static constexpr SizeType _min(SizeType a,SizeType b)
490 return ( (a<b) ? a : b );
507template <
typename T, Int64 Extent, Int64 MinValue>
509:
public SpanImpl<T, Int64, Extent, MinValue>
515 using size_type =
Int64;
516 using value_type =
typename BaseClass::value_type;
517 using pointer =
typename BaseClass::pointer;
518 template <
typename X>
519 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>>;
531 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
533 : BaseClass(from.m_ptr,from.m_size) {}
535 template <
typename X, Int64 XExtent, Int64 XMinValue,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
536 constexpr ARCCORE_HOST_DEVICE
Span(
const Span<X, XExtent, XMinValue>& from) noexcept
540 template <
typename X, Int32 XExtent, Int32 XMinValue,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
541 constexpr ARCCORE_HOST_DEVICE
Span(
const SmallSpan<X, XExtent, XMinValue>& from) noexcept
542 : BaseClass(from.data(), from.size())
544 template <Int64 XExtent, Int64 XMinValue>
545 constexpr ARCCORE_HOST_DEVICE
Span(
const SpanImpl<T, Int64, XExtent, XMinValue>& from) noexcept
548 template <Int32 XExtent, Int32 XMinValue>
549 constexpr ARCCORE_HOST_DEVICE
Span(
const SpanImpl<T, Int32, XExtent, XMinValue>& from) noexcept
550 : BaseClass(from.data(), from.size())
554 constexpr ARCCORE_HOST_DEVICE
Span(pointer ptr,
Int64 asize) noexcept
559 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
560 constexpr ARCCORE_HOST_DEVICE
Span(std::array<X,N>& from) noexcept
564 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
565 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
noexcept
576 static constexpr ThatClass
create(pointer ptr,size_type asize)
noexcept
578 return ThatClass(ptr,asize);
622 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
628 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
638 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
645 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
648 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
667template <
typename T, Int32 Extent, Int32 MinValue>
669:
public SpanImpl<T, Int32, Extent, MinValue>
675 using size_type =
Int32;
676 using value_type =
typename BaseClass::value_type;
677 using pointer =
typename BaseClass::pointer;
678 template <
typename X>
679 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>>;
693 template<typename X,typename = std::enable_if_t<std::is_same<X,value_type>::value> >
695 : BaseClass(from.m_ptr,from.m_size) {}
698 template<typename X,typename = std::enable_if_t<std::is_same<X,value_type>::value> >
699 constexpr ARCCORE_HOST_DEVICE
SmallSpan(
const SmallSpan<X>& from) noexcept
702 template <Int32 XExtent, Int32 XMinValue>
703 constexpr ARCCORE_HOST_DEVICE
SmallSpan(
const SpanImpl<T, Int32, XExtent, XMinValue>& from) noexcept
711 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
712 constexpr ARCCORE_HOST_DEVICE
SmallSpan(std::array<X,N>& from)
716 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
717 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X,N>& from)
727 static constexpr ThatClass
create(pointer ptr,size_type asize)
noexcept
729 return ThatClass(ptr,asize);
773 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
789 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPart() instead")
796 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPartInterval() instead")
799 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
813template<
typename T,
typename SizeType>
inline void
816 impl::dumpArray(o,val,max_print);
829template<
typename DataType,
typename IntegerType,
typename SizeType>
inline void
834 const Int64 result_size = indexes.
size();
835 [[maybe_unused]]
const Int64 my_size = values.
size();
836 const DataType* ptr = values.
data();
837 for(
Int64 i=0; i<result_size; ++i) {
838 IntegerType index = indexes[i];
839 ARCCORE_CHECK_AT(index,my_size);
840 result[i] = ptr[index];
854template<
typename DataType>
inline void
857 _sampleSpan<DataType,Int64,Int64>(values,indexes,result);
868template<
typename DataType>
inline void
871 _sampleSpan<DataType,Int32,Int64>(values,indexes,result);
879template <
typename DataType,
typename SizeType, SizeType Extent>
880inline typename detail::SpanTypeFromSize<const std::byte, SizeType>::SpanType
883 return {
reinterpret_cast<const std::byte*
>(s.
data()), s.
sizeBytes()};
889template <
typename DataType>
890inline SmallSpan<const std::byte>
899template <
typename DataType>
900inline SmallSpan<const std::byte>
913template<
typename DataType,
typename SizeType,SizeType Extent,
914 typename std::enable_if_t<!std::is_const<DataType>::value,
int> = 0>
915inline typename detail::SpanTypeFromSize<std::byte, SizeType>::SpanType
918 return {
reinterpret_cast<std::byte*
>(s.
data()), s.
sizeBytes()};
926template<
typename DataType>
inline SmallSpan<std::byte>
938template<
typename ByteType,
typename DataType,Int64 Extent>
inline Span<DataType>
939asSpanInternal(Span<ByteType,Extent> bytes)
941 Int64 size = bytes.
size();
944 static constexpr Int64 data_type_size =
static_cast<Int64
>(
sizeof(DataType));
945 static_assert(data_type_size>0,
"Bad datatype size");
946 ARCCORE_ASSERT((size%data_type_size)==0,(
"Size is not a multiple of sizeof(DataType)"));
947 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
948 return { ptr, size / data_type_size };
951template<
typename ByteType,
typename DataType,Int32 Extent>
inline SmallSpan<DataType>
952asSmallSpanInternal(SmallSpan<ByteType,Extent> bytes)
954 Int32 size = bytes.
size();
957 static constexpr Int32 data_type_size =
static_cast<Int32
>(
sizeof(DataType));
958 static_assert(data_type_size>0,
"Bad datatype size");
959 ARCCORE_ASSERT((size%data_type_size)==0,(
"Size is not a multiple of sizeof(DataType)"));
960 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
961 return { ptr, size / data_type_size };
972template<
typename DataType,Int64 Extent>
inline Span<DataType>
975 return detail::asSpanInternal<std::byte,DataType,Extent>(bytes);
981template<
typename DataType,Int64 Extent>
inline Span<const DataType>
984 return detail::asSpanInternal<const std::byte,const DataType,Extent>(bytes);
990template<
typename DataType,Int32 Extent>
inline SmallSpan<DataType>
993 return detail::asSmallSpanInternal<std::byte,DataType,Extent>(bytes);
999template<
typename DataType,Int32 Extent>
inline SmallSpan<const DataType>
1002 return detail::asSmallSpanInternal<const std::byte,const DataType,Extent>(bytes);
1010template<
typename DataType,
size_t SizeType>
inline Span<DataType,SizeType>
1014 return { s.
data(), size };
1019template<
typename DataType,
size_t SizeType>
inline SmallSpan<DataType,SizeType>
1023 return { s.
data(), size };
1033extern "C++" ARCCORE_BASE_EXPORT
void
1034binaryWrite(std::ostream& ostr,
const Span<const std::byte>& bytes);
1041extern "C++" ARCCORE_BASE_EXPORT
void
1042binaryRead(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.
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.
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 > subPart(Int32 abegin, Int32 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
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.
SmallSpan()=default
Construit une vue vide.
constexpr __host__ __device__ SmallSpan< T > subView(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.
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< T, DynExtent > subSpanInterval(Int32 index, Int32 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ SmallSpan< T > subViewInterval(Int32 index, Int32 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ SmallSpan(const ArrayView< value_type > &from) noexcept
Constructeur de recopie depuis une autre vue.
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from)
Opérateur de recopie.
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__ SizeType size() const noexcept
Retourne la taille du tableau.
friend bool operator==(const SpanImpl< T, SizeType, Extent, MinValue > &rhs, const SpanImpl< X, SizeType, Extent2, MinValue2 > &lhs)
Opérateur d'égalité (valide si T est const mais pas X)
constexpr __host__ __device__ iterator end() const noexcept
Itérateur sur le premier élément après la fin du tableau.
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.
constexpr void _setArray(pointer v, SizeType s) noexcept
Modifie le pointeur et la taille du tableau.
constexpr ThatClass subPartInterval(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.
ArrayRange< pointer > range() const
Intervalle d'itération du premier au dernièr élément.
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
constexpr __host__ __device__ ThatClass subspan(SizeType abegin, SizeType asize) const
Pour compatibilité avec le C++20.
constexpr ThatClass subSpanInterval(SizeType index, SizeType nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr void _setPtr(pointer v) noexcept
Modifie le pointeur du début du tableau.
constexpr ThatClass subView(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ SizeType length() const noexcept
Nombre d'éléments du tableau.
constexpr __host__ __device__ SpanImpl(const SpanImpl< X, SizeType, XExtent, XMinValue > &from) noexcept
Constructeur de recopie depuis une autre vue.
constexpr __host__ __device__ pointer ptrAt(SizeType index) const
Addresse du index-ème élément.
__host__ __device__ bool contains(const_reference v) const
true si le tableau contient l'élément de valeur v
constexpr ThatClass subViewInterval(SizeType index, SizeType nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ SpanImpl() noexcept
Construit une vue vide.
constexpr __host__ __device__ ThatClass subPart(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ reverse_iterator rbegin() const noexcept
Itérateur inverse sur le premier élément du tableau.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
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__ reference item(SizeType i) const
i-ème élément du tableau.
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
constexpr __host__ __device__ bool empty() const noexcept
Retourne true si le tableau est vide (dimension nulle)
constexpr __host__ __device__ ThatClass subSpan(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
static constexpr ThatClass create(pointer ptr, SizeType asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et.
friend bool operator!=(const SpanImpl< T, SizeType, Extent, MinValue > &rhs, const SpanImpl< X, SizeType, Extent2, MinValue2 > &lhs)
Opérateur d'inégalité (valide si T est const mais pas X)
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from)
Opérateur de recopie.
constexpr view_type smallView()
Vue constante sur cette vue.
constexpr void _setSize(SizeType s) noexcept
Modifie la taille du tableau.
constexpr __host__ __device__ SpanImpl(std::array< X, N > &from)
Construit une vue depuis un std::array.
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
friend bool operator==(const SpanImpl< T, SizeType, Extent, MinValue > &rhs, const SpanImpl< T, SizeType, Extent2, MinValue2 > &lhs)
Opérateur d'égalité
friend bool operator!=(const SpanImpl< T, SizeType, Extent, MinValue > &rhs, const SpanImpl< T, SizeType, Extent2, MinValue2 > &lhs)
Opérateur d'inégalité
constexpr __host__ __device__ SizeType sizeBytes() const noexcept
Retourne la taille du tableau en octets.
std::enable_if_t< std::is_same_v< X, T >||std::is_same_v< std::add_const_t< X >, T > > is_same_const_type
Indique si on peut convertir un 'X' ou 'const X' en un 'T'.
constexpr __host__ __device__ iterator begin() const noexcept
Itérateur sur le premier élément du tableau.
std::optional< SizeType > findFirst(const_reference v) const
Vue d'un tableau d'éléments de type T.
Span()=default
Construit une vue vide.
constexpr __host__ __device__ Span(std::array< X, N > &from) noexcept
Construit une vue à partir d'un std::array.
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__ Span< T > subViewInterval(Int64 index, Int64 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ Span< T > subView(Int64 abegin, Int64 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ Span(const ArrayView< value_type > &from) noexcept
Constructeur de recopie depuis une autre vue.
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from) noexcept
Opérateur de recopie.
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< 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 > 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.
Pour avoir le type (SmallSpan ou Span) en fonction de la taille (Int32 ou Int64)
Espace de nom de Arccore.
Int32 Integer
Type représentant un entier.
detail::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non 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.
__host__ __device__ void arccoreCheckAt(Int64 i, Int64 max_size)
Vérifie un éventuel débordement de tableau.
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....
SmallSpan< DataType > asSmallSpan(SmallSpan< std::byte, Extent > bytes)
Converti un SmallSpan<std::byte> en un SmallSpan<DataType>.
void binaryRead(std::istream &istr, const Span< std::byte > &bytes)
Lit en binaire le contenu de bytes depuis le flot istr.
std::int64_t Int64
Type entier signé sur 64 bits.
void binaryWrite(std::ostream &ostr, const Span< const std::byte > &bytes)
Ecrit en binaire le contenu de bytes sur le flot ostr.
detail::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets modifiables.
void sampleSpan(Span< const DataType > values, Span< const Int64 > indexes, Span< DataType > result)
Extrait un sous-tableau à à partir d'une liste d'index.
std::int32_t Int32
Type entier signé sur 32 bits.
Span< DataType > asSpan(Span< std::byte, Extent > bytes)
Converti un Span<std::byte> en un Span<DataType>.
void dumpArray(std::ostream &o, ConstArrayView< T > val, int max_print)
Affiche sur le flot o les valeurs du tableau val.