12#ifndef ARCCORE_BASE_SPAN2_H
13#define ARCCORE_BASE_SPAN2_H
18#include "arccore/base/TraceInfo.h"
19#include "arccore/base/Array2View.h"
62template<
typename T,
typename SizeType,SizeType Extent1,SizeType Extent2>
69 using ElementType = T;
70 using element_type = ElementType;
71 using value_type =
typename std::remove_cv<ElementType>::type;
75 using pointer = ElementType*;
76 using const_pointer =
typename std::add_const<ElementType*>::type;
77 using reference = ElementType&;
78 using const_reference =
const ElementType&;
83 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>>;
89 : m_ptr(ptr), m_dim1_size(dim1_size), m_dim2_size(dim2_size) {}
91 ARCCORE_HOST_DEVICE
Span2Impl() : m_ptr(nullptr), m_dim1_size(0), m_dim2_size(0) {}
94 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
98 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
99 ARCCORE_HOST_DEVICE
Span2Impl(
const Span2<X>& from)
115 ARCCORE_CHECK_AT(i,m_dim1_size);
119 constexpr ARCCORE_HOST_DEVICE SpanImpl<ElementType,SizeType> operator()(
SizeType i)
const
121 ARCCORE_CHECK_AT(i,m_dim1_size);
122 return SpanImpl<ElementType,SizeType>(m_ptr + (m_dim2_size*i),m_dim2_size);
125 constexpr ARCCORE_HOST_DEVICE reference operator()(
SizeType i,
SizeType j)
const
127 ARCCORE_CHECK_AT2(i,j,m_dim1_size,m_dim2_size);
128 return m_ptr[(m_dim2_size*i) + j];
131#ifdef ARCCORE_HAS_MULTI_SUBSCRIPT
132 constexpr ARCCORE_HOST_DEVICE reference operator[](
SizeType i,
SizeType j)
const
134 ARCCORE_CHECK_AT2(i,j,m_dim1_size,m_dim2_size);
135 return m_ptr[(m_dim2_size*i) + j];
142 ARCCORE_CHECK_AT2(i,j,m_dim1_size,m_dim2_size);
143 return m_ptr[(m_dim2_size*i) + j];
149 ARCCORE_CHECK_AT2(i,j,m_dim1_size,m_dim2_size);
150 m_ptr[(m_dim2_size*i) + j] = value;
162 return view_type(m_ptr,s1,s2);
181 constexpr ARCCORE_HOST_DEVICE ElementType*
data() {
return m_ptr; }
184 constexpr ARCCORE_HOST_DEVICE
const ElementType*
data()
const {
return m_ptr; }
189 template<
typename X,SizeType XExtent1,SizeType XExtent2,
typename = std::enable_if_t<std::is_same_v<X,value_type>>>
192 return impl::areEqual2D(rhs,lhs);
195 template<
typename X,SizeType XExtent1,SizeType XExtent2,
typename = std::enable_if_t<std::is_same_v<X,value_type>>>
198 return !impl::areEqual2D(rhs,lhs);
201 template<SizeType XExtent1,SizeType XExtent2>
204 return impl::areEqual2D(rhs,lhs);
207 template<SizeType XExtent1,SizeType XExtent2>
210 return !impl::areEqual2D(rhs,lhs);
230template<
class T,Int32 Extent1,Int32 Extent2>
232:
public Span2Impl<T,Int32,Extent1,Extent2>
234 friend class Span2<T>;
240 using size_type =
Int32;
241 using value_type =
typename BaseClass::value_type;
242 using pointer =
typename BaseClass::pointer;
243 using BaseClass::operator();
244 using BaseClass::operator[];
245 using ElementType =
typename BaseClass::ElementType;
249 using BaseClass::m_ptr;
250 using BaseClass::m_dim1_size;
251 using BaseClass::m_dim2_size;
265 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
269 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
270 ARCCORE_HOST_DEVICE
SmallSpan2(
const SmallSpan2<X>& from)
275 ARCCORE_HOST_DEVICE SmallSpan<ElementType> operator[](
Int32 i)
const
277 ARCCORE_CHECK_AT(i,m_dim1_size);
278 return SmallSpan<ElementType>(m_ptr + (m_dim2_size*i),m_dim2_size);
281 ARCCORE_HOST_DEVICE SmallSpan<ElementType> operator()(
Int32 i)
const
283 ARCCORE_CHECK_AT(i,m_dim1_size);
284 return SmallSpan<ElementType>(m_ptr + (m_dim2_size*i),m_dim2_size);
298template<
class T,Int64 Extent1,Int64 Extent2>
300:
public Span2Impl<T,Int64,Extent1,Extent2>
306 using size_type =
Int64;
307 using value_type =
typename BaseClass::value_type;
308 using pointer =
typename BaseClass::pointer;
309 using BaseClass::operator();
310 using BaseClass::operator[];
311 using ElementType =
typename BaseClass::ElementType;
315 using BaseClass::m_ptr;
316 using BaseClass::m_dim1_size;
317 using BaseClass::m_dim2_size;
331 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
340 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
345 template<
typename X,
typename = std::enable_if_t<std::is_same_v<X,value_type>> >
346 ARCCORE_HOST_DEVICE
Span2(
const SmallSpan2<X>& from)
351 ARCCORE_HOST_DEVICE Span<ElementType> operator[](
Int64 i)
const
353 ARCCORE_CHECK_AT(i,m_dim1_size);
354 return Span<ElementType>(m_ptr + (m_dim2_size*i),m_dim2_size);
357 ARCCORE_HOST_DEVICE Span<ElementType> operator()(
Int64 i)
const
359 ARCCORE_CHECK_AT(i,m_dim1_size);
360 return Span<ElementType>(m_ptr + (m_dim2_size*i),m_dim2_size);
Déclarations des types de la composante 'base' de Arccore.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Vue pour un tableau 2D constant.
Vue constante d'un tableau de type T.
Vue pour un tableau 2D dont la taille est un 'Int32'.
ARCCORE_HOST_DEVICE SmallSpan2()
Créé une vue 2D vide.
SmallSpan2(const Array2View< value_type > &from)
Constructeur de recopie depuis une autre vue.
ARCCORE_HOST_DEVICE SmallSpan2(pointer ptr, Int32 dim1_size, Int32 dim2_size)
Créé une vue 2D de dimension [dim1_size][dim2_size].
constexpr ARCCORE_HOST_DEVICE SizeType dim2Size() const
Nombre d'éléments de la deuxième dimension.
constexpr ARCCORE_HOST_DEVICE const ElementType * data() const
Pointeur sur la mémoire allouée.
friend bool operator!=(const ThatClass &lhs, const Span2Impl< T, SizeType, XExtent1, XExtent2 > &rhs)
Opérateur d'inégalité
constexpr ARCCORE_HOST_DEVICE ElementType item(SizeType i, SizeType j) const
Valeur de l'élément [i][j].
friend bool operator==(const ThatClass &lhs, const Span2Impl< X, SizeType, XExtent1, XExtent2 > &rhs)
Opérateur d'égalité (valide si T est const mais pas X)
ARCCORE_HOST_DEVICE Span2Impl()
Créé une vue 2D vide.
constexpr ARCCORE_HOST_DEVICE SizeType dim1Size() const
Nombre d'éléments de la première dimension.
friend bool operator!=(const ThatClass &lhs, const Span2Impl< X, SizeType, XExtent1, XExtent2 > &rhs)
Opérateur d'inégalité (valide si T est const mais pas X)
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.
friend bool operator==(const ThatClass &lhs, const Span2Impl< T, SizeType, XExtent1, XExtent2 > &rhs)
Opérateur d'égalité
constexpr ElementType * unguardedBasePointer()
Pointeur sur la mémoire allouée.
constexpr ARCCORE_HOST_DEVICE ElementType * data()
Pointeur sur la mémoire allouée.
constexpr ARCCORE_HOST_DEVICE ElementType setItem(SizeType i, SizeType j, const ElementType &value)
Positionne l'élément [i][j] à value.
ARCCORE_HOST_DEVICE Span2Impl(pointer ptr, SizeType dim1_size, SizeType dim2_size)
Créé une vue 2D de dimension [dim1_size][dim2_size].
constexpr view_type smallView()
Vue constante sur cette vue.
constexpr ARCCORE_HOST_DEVICE SizeType totalNbElement() const
Nombre total d'éléments.
Vue pour un tableau 2D dont la taille est un 'Int64'.
Span2(const SmallSpan2< T > &from)
Constructeur de recopie depuis un 'SmallSpan'.
ARCCORE_HOST_DEVICE Span2()
Créé une vue 2D vide.
Span2(const Array2View< value_type > &from)
Constructeur de recopie depuis une autre vue.
ARCCORE_HOST_DEVICE Span2(pointer ptr, Int64 dim1_size, Int64 dim2_size)
Créé une vue 2D de dimension [dim1_size][dim2_size].
Vue d'un tableau d'éléments de type T.
Espace de nom de Arccore.
constexpr ARCCORE_HOST_DEVICE Integer arccoreCheckArraySize(unsigned long long size)
Vérifie que size peut être converti dans un 'Integer' pour servir de taille à un tableau....
Int32 Integer
Type représentant un entier.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.)