12#ifndef ARCCORE_BASE_SPAN_H
13#define ARCCORE_BASE_SPAN_H
17#include "arccore/base/ArrayView.h"
45 template <
typename T,
typename SizeType>
90template<
typename T,
typename SizeType,SizeType Extent,SizeType MinValue>
96 using size_type = SizeType;
97 using ElementType = T;
98 using element_type = ElementType;
99 using value_type =
typename std::remove_cv_t<ElementType>;
100 using const_value_type =
typename std::add_const_t<value_type>;
101 using index_type = SizeType;
102 using difference_type = SizeType;
103 using pointer = ElementType*;
104 using const_pointer =
const ElementType*;
105 using reference = ElementType&;
106 using const_reference =
const ElementType&;
109 using view_type =
typename impl::ViewTypeT<ElementType>::view_type;
110 using reverse_iterator = std::reverse_iterator<iterator>;
111 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
115 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>>;
120 constexpr ARCCORE_HOST_DEVICE
SpanImpl() noexcept : m_ptr(
nullptr), m_size(0) {}
124 template <
typename X, SizeType XExtent, SizeType XMinValue,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
127 , m_size(from.size())
130 template <SizeType XExtent, SizeType XMinValue>
133 , m_size(from.size())
137 constexpr ARCCORE_HOST_DEVICE
SpanImpl(pointer ptr, SizeType asize) noexcept
143 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
144 constexpr ARCCORE_HOST_DEVICE
SpanImpl(std::array<X,N>& from)
148 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
149 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X,N>& from)
160 static constexpr ThatClass
create(pointer ptr,SizeType asize)
noexcept
162 return ThatClass(ptr,asize);
172 constexpr ARCCORE_HOST_DEVICE reference
operator[](SizeType i)
const
174 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
183 constexpr ARCCORE_HOST_DEVICE reference
operator()(SizeType i)
const
185 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
194 constexpr ARCCORE_HOST_DEVICE reference
item(SizeType i)
const
196 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
205 constexpr ARCCORE_HOST_DEVICE
void setItem(SizeType i, const_reference v)
noexcept
207 ARCCORE_CHECK_RANGE(i, MinValue, m_size);
212 constexpr ARCCORE_HOST_DEVICE SizeType
size() const noexcept {
return m_size; }
214 constexpr ARCCORE_HOST_DEVICE SizeType
sizeBytes() const noexcept {
return static_cast<SizeType
>(m_size *
sizeof(value_type)); }
216 constexpr ARCCORE_HOST_DEVICE SizeType
length() const noexcept {
return m_size; }
221 constexpr ARCCORE_HOST_DEVICE iterator
begin() const noexcept {
return iterator(m_ptr); }
225 constexpr ARCCORE_HOST_DEVICE iterator
end() const noexcept {
return iterator(m_ptr+m_size); }
227 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rbegin() const noexcept {
return std::make_reverse_iterator(
end()); }
229 constexpr ARCCORE_HOST_DEVICE reverse_iterator
rend() const noexcept {
return std::make_reverse_iterator(
begin()); }
234 ARCCORE_DEPRECATED_REASON(
"Y2023: Use begin()/end() instead")
243 constexpr ARCCORE_HOST_DEVICE pointer
ptrAt(SizeType index)
const
245 ARCCORE_CHECK_AT(index,m_size);
250 constexpr ARCCORE_HOST_DEVICE
reference at(SizeType i)
const
257 constexpr ARCCORE_HOST_DEVICE
void setAt(SizeType i,const_reference value)
264 ARCCORE_HOST_DEVICE
inline void fill(T o)
266 for( SizeType i=0, n=m_size; i<n; ++i )
276 return view_type(s,m_ptr);
295 constexpr ARCCORE_HOST_DEVICE ThatClass
subSpan(SizeType abegin,SizeType asize)
const
299 asize = _min(asize,m_size-abegin);
300 return {m_ptr+abegin,asize};
307 constexpr ARCCORE_HOST_DEVICE ThatClass
subPart(SizeType abegin,SizeType asize)
const
320 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
321 constexpr ThatClass
subView(SizeType abegin,SizeType asize)
const
327 constexpr ARCCORE_HOST_DEVICE ThatClass
subspan(SizeType abegin,SizeType asize)
const
333 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
336 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
342 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
348 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
359 template<
class U> ARCCORE_HOST_DEVICE
362 Int64 n = copy_array.size();
363 Int64 size_as_int64 = m_size;
365 const_pointer copy_begin = copy_array.data();
366 pointer to_ptr = m_ptr;
369 SizeType n_as_sizetype =
static_cast<SizeType
>(n);
370 for( SizeType i=0; i<n_as_sizetype; ++i )
371 to_ptr[i] = copy_begin[i];
375 constexpr ARCCORE_HOST_DEVICE
bool empty() const noexcept {
return m_size==0; }
377 ARCCORE_HOST_DEVICE
bool contains(const_reference v)
const
379 for( SizeType i=0; i<m_size; ++i ){
392 std::optional<SizeType>
findFirst(const_reference v)
const
394 for( SizeType i=0; i<m_size; ++i ){
403 constexpr ARCCORE_HOST_DEVICE
void setArray(
const ArrayView<T>& v)
noexcept
408 constexpr ARCCORE_HOST_DEVICE
void setArray(
const Span<T>& v)
noexcept
422 constexpr ARCCORE_HOST_DEVICE pointer
data() const noexcept {
return m_ptr; }
425 template<
typename X,SizeType Extent2,SizeType MinValue2,
typename = std::enable_if_t<std::is_same_v<X,value_type>>>
friend bool
432 template<
typename X,SizeType Extent2,SizeType MinValue2,
typename = std::enable_if_t<std::is_same_v<X,value_type>>>
friend bool
439 template<SizeType Extent2,SizeType MinValue2>
friend bool
446 template<SizeType Extent2,SizeType MinValue2>
friend bool
452 friend inline std::ostream&
operator<<(std::ostream& o,
const ThatClass& val)
466 constexpr void _setArray(pointer v,SizeType s)
noexcept { m_ptr = v; m_size = s; }
474 constexpr void _setPtr(pointer v)
noexcept { m_ptr = v; }
482 constexpr void _setSize(SizeType s)
noexcept { m_size = s; }
491 static constexpr SizeType _min(SizeType a,SizeType b)
493 return ( (a<b) ? a : b );
510template <
typename T, Int64 Extent, Int64 MinValue>
512:
public SpanImpl<T, Int64, Extent, MinValue>
518 using size_type =
Int64;
519 using value_type =
typename BaseClass::value_type;
520 using pointer =
typename BaseClass::pointer;
521 template <
typename X>
522 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>>;
530 : BaseClass(from.m_ptr, from.m_size)
534 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
536 : BaseClass(from.m_ptr,from.m_size) {}
538 template <
typename X, Int64 XExtent, Int64 XMinValue,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
543 template <
typename X, Int32 XExtent, Int32 XMinValue,
typename = std::enable_if_t<std::is_same_v<const X, T>>>
544 constexpr ARCCORE_HOST_DEVICE
Span(
const SmallSpan<X, XExtent, XMinValue>& from) noexcept
545 : BaseClass(from.data(), from.size())
547 template <Int64 XExtent, Int64 XMinValue>
551 template <Int32 XExtent, Int32 XMinValue>
553 : BaseClass(from.data(), from.size())
557 constexpr ARCCORE_HOST_DEVICE
Span(pointer ptr,
Int64 asize) noexcept
558 : BaseClass(ptr, asize)
562 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
563 constexpr ARCCORE_HOST_DEVICE
Span(std::array<X,N>& from) noexcept
564 : BaseClass(from.data(),from.size()) {}
567 template <std::
size_t N,
typename X,
typename = is_same_const_type<X>>
568 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X, N>& from)
noexcept
579 static constexpr ThatClass
create(pointer ptr,size_type asize)
noexcept
581 return ThatClass(ptr,asize);
625 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
631 return impl::subViewInterval<ThatClass>(*
this, index, nb_interval);
641 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpan() instead")
648 ARCCORE_DEPRECATED_REASON(
"Y2023: use subSpanInterval() instead")
651 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
670template <
typename T, Int32 Extent, Int32 MinValue>
672:
public SpanImpl<T, Int32, Extent, MinValue>
678 using size_type =
Int32;
679 using value_type =
typename BaseClass::value_type;
680 using pointer =
typename BaseClass::pointer;
681 template <
typename X>
682 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>>;
691 : BaseClass(from.m_ptr, from.m_size)
696 template<typename X,typename = std::enable_if_t<std::is_same<X,value_type>::value> >
698 : BaseClass(from.m_ptr,from.m_size) {}
701 template<typename X,typename = std::enable_if_t<std::is_same<X,value_type>::value> >
705 template <Int32 XExtent, Int32 XMinValue>
712 : BaseClass(ptr,asize) {}
714 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
715 constexpr ARCCORE_HOST_DEVICE
SmallSpan(std::array<X,N>& from)
719 template<std::
size_t N,
typename X,
typename = is_same_const_type<X> >
720 constexpr ARCCORE_HOST_DEVICE ThatClass&
operator=(std::array<X,N>& from)
730 static constexpr ThatClass
create(pointer ptr,size_type asize)
noexcept
732 return ThatClass(ptr,asize);
776 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
792 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPart() instead")
799 ARCCORE_DEPRECATED_REASON(
"Y2023: use subPartInterval() instead")
802 return impl::subViewInterval<ThatClass>(*
this,index,nb_interval);
816template<
typename T,
typename SizeType>
inline void
819 impl::dumpArray(o,val,max_print);
832template<
typename DataType,
typename IntegerType,
typename SizeType>
inline void
837 const Int64 result_size = indexes.
size();
838 [[maybe_unused]]
const Int64 my_size = values.
size();
839 const DataType* ptr = values.
data();
840 for(
Int64 i=0; i<result_size; ++i) {
841 IntegerType index = indexes[i];
842 ARCCORE_CHECK_AT(index,my_size);
843 result[i] = ptr[index];
857template<
typename DataType>
inline void
871template<
typename DataType>
inline void
882template <
typename DataType,
typename SizeType, SizeType Extent>
883inline typename impl::SpanTypeFromSize<const std::byte, SizeType>::SpanType
886 return {
reinterpret_cast<const std::byte*
>(s.
data()), s.
sizeBytes()};
892template <
typename DataType>
893inline SmallSpan<const std::byte>
902template <
typename DataType>
903inline SmallSpan<const std::byte>
916template<
typename DataType,
typename SizeType,SizeType Extent,
917 typename std::enable_if_t<!std::is_const<DataType>::value,
int> = 0>
918inline typename impl::SpanTypeFromSize<std::byte, SizeType>::SpanType
921 return {
reinterpret_cast<std::byte*
>(s.
data()), s.
sizeBytes()};
929template<
typename DataType>
inline SmallSpan<std::byte>
941template<
typename ByteType,
typename DataType,Int64 Extent>
inline Span<DataType>
942asSpanInternal(Span<ByteType,Extent> bytes)
944 Int64 size = bytes.
size();
947 static constexpr Int64 data_type_size =
static_cast<Int64>(
sizeof(DataType));
948 static_assert(data_type_size>0,
"Bad datatype size");
949 ARCCORE_ASSERT((size%data_type_size)==0,(
"Size is not a multiple of sizeof(DataType)"));
950 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
951 return { ptr, size / data_type_size };
954template<
typename ByteType,
typename DataType,Int32 Extent>
inline SmallSpan<DataType>
955asSmallSpanInternal(SmallSpan<ByteType,Extent> bytes)
957 Int32 size = bytes.size();
960 static constexpr Int32 data_type_size =
static_cast<Int32>(
sizeof(DataType));
961 static_assert(data_type_size>0,
"Bad datatype size");
962 ARCCORE_ASSERT((size%data_type_size)==0,(
"Size is not a multiple of sizeof(DataType)"));
963 auto* ptr =
reinterpret_cast<DataType*
>(bytes.data());
964 return { ptr, size / data_type_size };
978 return impl::asSpanInternal<std::byte,DataType,Extent>(bytes);
984template<
typename DataType,Int64 Extent>
inline Span<const DataType>
987 return impl::asSpanInternal<const std::byte,const DataType,Extent>(bytes);
993template<
typename DataType,Int32 Extent>
inline SmallSpan<DataType>
996 return impl::asSmallSpanInternal<std::byte,DataType,Extent>(bytes);
1002template<
typename DataType,Int32 Extent>
inline SmallSpan<const DataType>
1005 return impl::asSmallSpanInternal<const std::byte,const DataType,Extent>(bytes);
1013template<
typename DataType,
size_t SizeType>
inline Span<DataType,SizeType>
1017 return { s.data(), size };
1022template<
typename DataType,
size_t SizeType>
inline SmallSpan<DataType,SizeType>
1026 return { s.data(), size };
1036extern "C++" ARCCORE_BASE_EXPORT
void
1037binaryWrite(std::ostream& ostr,
const Span<const std::byte>& bytes);
1044extern "C++" ARCCORE_BASE_EXPORT
void
1045binaryRead(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.
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 > subSpanInterval(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 > subSpan(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__ ThatClass & operator=(std::array< X, N > &from)
Opérateur de recopie.
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 > subViewInterval(Int32 index, Int32 nb_interval) const
constexpr __host__ __device__ SmallSpan< Pointer > subView(Int32 abegin, Int32 asize) const
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(const ArrayView< value_type > &from) noexcept
Constructeur de recopie depuis une autre vue.
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ iterator begin() const noexcept
Itérateur sur le premier élément 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__ ThatClass subPart(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr view_type smallView()
Vue constante sur cette vue.
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from)
Opérateur de recopie.
__host__ __device__ bool contains(const_reference v) const
true si le tableau contient l'élément de valeur v
constexpr ThatClass subSpanInterval(SizeType index, SizeType nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr void _setSize(SizeType s) noexcept
Modifie la taille du tableau.
std::optional< SizeType > findFirst(const_reference v) const
__host__ __device__ void copy(const U ©_array)
Recopie le tableau copy_array dans l'instance.
constexpr __host__ __device__ SpanImpl() noexcept
Construit une vue vide.
constexpr __host__ __device__ void setItem(SizeType i, const_reference v) noexcept
Positionne le i-ème élément du tableau.
constexpr __host__ __device__ pointer ptrAt(SizeType index) const
Addresse du index-ème élément.
constexpr __host__ __device__ reference operator()(SizeType i) const
i-ème élément du tableau.
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 ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
constexpr __host__ __device__ SpanImpl(std::array< X, N > &from)
Construit une vue depuis un std::array.
constexpr __host__ __device__ iterator end() const noexcept
Itérateur sur le premier élément après la fin du tableau.
constexpr __host__ __device__ ThatClass subspan(SizeType abegin, SizeType asize) const
Pour compatibilité avec le C++20.
static constexpr ThatClass create(pointer ptr, SizeType asize) noexcept
Construit une vue sur une zone mémoire commencant par ptr et.
constexpr __host__ __device__ reverse_iterator rend() const noexcept
Itérateur inverse sur le premier élément après la fin du tableau.
constexpr ThatClass subPartInterval(SizeType index, SizeType nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
ArrayRange< pointer > range() const
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, XMinValue > &from) noexcept
Constructeur de recopie depuis une autre vue.
constexpr void _setPtr(pointer v) noexcept
Modifie le pointeur du début du tableau.
constexpr void _setArray(pointer v, SizeType s) noexcept
Modifie le pointeur et la taille du tableau.
constexpr __host__ __device__ bool empty() const noexcept
Retourne true si le tableau est vide (dimension nulle)
constexpr __host__ __device__ SizeType sizeBytes() const noexcept
Retourne la taille du tableau en octets.
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__ Int64 size() const noexcept
constexpr __host__ __device__ ThatClass subSpan(SizeType abegin, SizeType asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
constexpr __host__ __device__ reference operator[](SizeType i) const
i-ème élément du tableau.
constexpr ThatClass subViewInterval(Int64 index, Int64 nb_interval) const
friend bool operator==(const SpanImpl< T, SizeType, Extent, MinValue > &rhs, const SpanImpl< T, SizeType, Extent2, MinValue2 > &lhs)
Opérateur d'égalité
constexpr __host__ __device__ pointer data() const noexcept
constexpr __host__ __device__ reference item(SizeType i) const
i-ème élément du tableau.
constexpr ThatClass subView(Int64 abegin, Int64 asize) const
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 length() const noexcept
Nombre d'éléments du tableau.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
constexpr __host__ __device__ reverse_iterator rbegin() const noexcept
Itérateur inverse sur le premier élément du tableau.
Vue d'un tableau d'éléments de type T.
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(std::array< X, N > &from) noexcept
Construit une vue à partir d'un std::array.
constexpr __host__ __device__ ThatClass & operator=(std::array< X, N > &from) noexcept
Opérateur de recopie.
constexpr __host__ __device__ Span< DataType > subViewInterval(Int64 index, Int64 nb_interval) 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__ 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, 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 > 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.
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< T, DynExtent > subPartInterval(Int64 index, Int64 nb_interval) const
Sous-vue correspondant à l'interval index sur nb_interval.
constexpr __host__ __device__ Span< DataType > subView(Int64 abegin, Int64 asize) const
Pour avoir le type (SmallSpan ou Span) en fonction de la taille (Int32 ou Int64)
-*- 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.
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.
__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>.
impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
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.
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.