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.