12#ifndef ARCCORE_BASE_ARRAYVIEWCOMMON_H
13#define ARCCORE_BASE_ARRAYVIEWCOMMON_H
17#include "arccore/base/ArrayIterator.h"
22#include "arccore/base/ArrayViewDumper.h"
28#ifndef ARCCORE_COMPILING_FRAMEWORK
42template <
typename ViewType>
49template <
typename ViewType> ARCCORE_HOST_DEVICE
auto
50subViewInterval(ViewType view,
51 typename ViewType::size_type index,
52 typename ViewType::size_type nb_interval) -> ViewType
54 using size_type =
typename ViewType::size_type;
57 if (index < 0 || index >= nb_interval)
59 size_type n = view.size();
60 size_type isize = n / nb_interval;
61 size_type ibegin = index * isize;
63 if ((index + 1) == nb_interval)
65 return ViewType::create(view.data() + ibegin, isize);
77template <
typename ViewType>
inline void
78dumpArray(std::ostream& o, ViewType val,
int max_print)
80 ArrayViewDumper<ViewType>::dumpArray(o, val, max_print);
87template <
typename ViewType>
inline bool
88areEqual(ViewType rhs, ViewType lhs)
90 using size_type =
typename ViewType::size_type;
91 if (rhs.size() != lhs.size())
93 size_type s = rhs.size();
94 for (size_type i = 0; i < s; ++i) {
105template <
typename View2DType>
inline bool
106areEqual2D(View2DType rhs, View2DType lhs)
108 using size_type =
typename View2DType::size_type;
109 const size_type dim1_size = rhs.dim1Size();
110 const size_type dim2_size = rhs.dim2Size();
111 if (dim1_size != lhs.dim1Size())
113 if (dim2_size != lhs.dim2Size())
115 for (size_type i = 0; i < dim1_size; ++i) {
116 for (size_type j = 0; j < dim2_size; ++j) {
117 if (rhs(i, j) != lhs(i, j))
128extern "C++" ARCCORE_BASE_EXPORT
void
129arccoreThrowTooBigInteger [[noreturn]] (std::size_t size);
131extern "C++" ARCCORE_BASE_EXPORT
void
132arccoreThrowTooBigInt64 [[noreturn]] (std::size_t size);
134extern "C++" ARCCORE_BASE_EXPORT
void
135arccoreThrowNegativeSize [[noreturn]] (
Int64 size);
141inline constexpr ARCCORE_HOST_DEVICE
void
142arccoreCheckIsPositive(
Int64 size)
145#ifdef ARCCORE_DEVICE_CODE
146 assert(
"'size' is negative");
148 Arcane::Impl::arccoreThrowNegativeSize(size);
154inline constexpr ARCCORE_HOST_DEVICE
void
155arccoreCheckIsValidInteger(
Int64 size)
158#ifdef ARCCORE_DEVICE_CODE
159 assert(
"'size' is bigger than ARCCORE_INTEGER_MAX");
161 Arcane::Impl::arccoreThrowTooBigInteger(size);
167inline constexpr ARCCORE_HOST_DEVICE
void
168arccoreCheckIsValidInt64(
size_t size)
170 if (size >= ARCCORE_INT64_MAX) {
171#ifdef ARCCORE_DEVICE_CODE
172 assert(
"'size' is bigger than ARCCORE_INT64_MAX");
174 Arcane::Impl::arccoreThrowTooBigInt64(size);
196inline constexpr ARCCORE_HOST_DEVICE
Integer
199 Arcane::Impl::arccoreCheckIsValidInteger(size);
200 return static_cast<Integer>(size);
212 Arcane::Impl::arccoreCheckIsValidInteger(size);
213 Arcane::Impl::arccoreCheckIsPositive(size);
214 return static_cast<Integer>(size);
223inline constexpr ARCCORE_BASE_EXPORT
Integer
226 Arcane::Impl::arccoreCheckIsValidInteger(size);
227 return static_cast<Integer>(size);
237inline constexpr ARCCORE_HOST_DEVICE
Integer
240 Arcane::Impl::arccoreCheckIsValidInteger(size);
241 Arcane::Impl::arccoreCheckIsPositive(size);
242 return static_cast<Integer>(size);
251inline constexpr ARCCORE_HOST_DEVICE
Integer
254 Arcane::Impl::arccoreCheckIsValidInteger(size);
255 return static_cast<Integer>(size);
264inline constexpr ARCCORE_HOST_DEVICE
Integer
267 Arcane::Impl::arccoreCheckIsValidInteger(size);
268 Arcane::Impl::arccoreCheckIsPositive(size);
269 return static_cast<Integer>(size);
279inline constexpr ARCCORE_HOST_DEVICE Int64
282 Arcane::Impl::arccoreCheckIsValidInt64(size);
283 return static_cast<Int64>(size);
297 template <
typename SizeType> ARCCORE_HOST_DEVICE
static Int32 check(SizeType size)
309 static ARCCORE_HOST_DEVICE
Int64 check(std::size_t size)
323namespace Arccore::impl
325using Arcane::Impl::arccoreCheckIsPositive;
326using Arcane::Impl::arccoreCheckIsValidInt64;
327using Arcane::Impl::arccoreCheckIsValidInteger;
328using Arcane::Impl::arccoreThrowNegativeSize;
329using Arcane::Impl::arccoreThrowTooBigInt64;
330using Arcane::Impl::arccoreThrowTooBigInteger;
331using Arcane::Impl::areEqual;
332using Arcane::Impl::areEqual2D;
333using Arcane::Impl::dumpArray;
334using Arcane::Impl::subViewInterval;
#define ARCCORE_INTEGER_MAX
Macro indiquant la valeur maximal que peut prendre le type Integer.
Classe utilitaire pour afficher une vue de tableau sur un flux.
-- 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 __host__ __device__ Int64 arccoreCheckLargeArraySize(size_t size)
Vérifie que size peut être converti dans un 'Int64' pour servir de taille à un tableau.
std::int32_t Int32
Type entier signé sur 32 bits.
Espace de nom de Arccore.