12#ifndef ARCCORE_BASE_ARRAYVIEWCOMMON_H
13#define ARCCORE_BASE_ARRAYVIEWCOMMON_H
17#include "arccore/base/ArrayIterator.h"
23#include "arccore/base/ArrayViewDumper.h"
29#ifndef ARCCORE_COMPILING_FRAMEWORK
43template <
typename ViewType>
50template <
typename ViewType> ARCCORE_HOST_DEVICE
auto
51subViewInterval(ViewType view,
52 typename ViewType::size_type index,
53 typename ViewType::size_type nb_interval) -> ViewType
55 using size_type =
typename ViewType::size_type;
58 if (index < 0 || index >= nb_interval)
60 size_type n = view.size();
61 size_type isize = n / nb_interval;
62 size_type ibegin = index * isize;
64 if ((index + 1) == nb_interval)
66 return ViewType::create(view.data() + ibegin, isize);
78template <
typename ViewType>
inline void
79dumpArray(std::ostream& o, ViewType val,
int max_print)
81 ArrayViewDumper<ViewType>::dumpArray(o, val, max_print);
88template <
typename ViewType>
inline bool
89areEqual(ViewType rhs, ViewType lhs)
91 using size_type =
typename ViewType::size_type;
92 if (rhs.size() != lhs.size())
94 size_type s = rhs.size();
95 for (size_type i = 0; i < s; ++i) {
106template <
typename View2DType>
inline bool
107areEqual2D(View2DType rhs, View2DType lhs)
109 using size_type =
typename View2DType::size_type;
110 const size_type dim1_size = rhs.dim1Size();
111 const size_type dim2_size = rhs.dim2Size();
112 if (dim1_size != lhs.dim1Size())
114 if (dim2_size != lhs.dim2Size())
116 for (size_type i = 0; i < dim1_size; ++i) {
117 for (size_type j = 0; j < dim2_size; ++j) {
118 if (rhs(i, j) != lhs(i, j))
129extern "C++" ARCCORE_BASE_EXPORT
void
130arccoreThrowTooBigInteger [[noreturn]] (std::size_t size);
132extern "C++" ARCCORE_BASE_EXPORT
void
133arccoreThrowTooBigInt64 [[noreturn]] (std::size_t size);
135extern "C++" ARCCORE_BASE_EXPORT
void
136arccoreThrowNegativeSize [[noreturn]] (
Int64 size);
142inline constexpr ARCCORE_HOST_DEVICE
void
143arccoreCheckIsPositive(
Int64 size)
146#ifdef ARCCORE_DEVICE_CODE
147 assert(
"'size' is negative");
149 Arcane::Impl::arccoreThrowNegativeSize(size);
155inline constexpr ARCCORE_HOST_DEVICE
void
156arccoreCheckIsValidInteger(
Int64 size)
159#ifdef ARCCORE_DEVICE_CODE
160 assert(
"'size' is bigger than ARCCORE_INTEGER_MAX");
162 Arcane::Impl::arccoreThrowTooBigInteger(size);
168inline constexpr ARCCORE_HOST_DEVICE
void
169arccoreCheckIsValidInt64(
size_t size)
171 if (size >= ARCCORE_INT64_MAX) {
172#ifdef ARCCORE_DEVICE_CODE
173 assert(
"'size' is bigger than ARCCORE_INT64_MAX");
175 Arcane::Impl::arccoreThrowTooBigInt64(size);
197inline constexpr ARCCORE_HOST_DEVICE
Integer
200 Arcane::Impl::arccoreCheckIsValidInteger(size);
201 return static_cast<Integer>(size);
213 Arcane::Impl::arccoreCheckIsValidInteger(size);
214 Arcane::Impl::arccoreCheckIsPositive(size);
215 return static_cast<Integer>(size);
224inline constexpr ARCCORE_BASE_EXPORT
Integer
227 Arcane::Impl::arccoreCheckIsValidInteger(size);
228 return static_cast<Integer>(size);
238inline constexpr ARCCORE_HOST_DEVICE
Integer
241 Arcane::Impl::arccoreCheckIsValidInteger(size);
242 Arcane::Impl::arccoreCheckIsPositive(size);
243 return static_cast<Integer>(size);
252inline constexpr ARCCORE_HOST_DEVICE
Integer
255 Arcane::Impl::arccoreCheckIsValidInteger(size);
256 return static_cast<Integer>(size);
265inline constexpr ARCCORE_HOST_DEVICE
Integer
268 Arcane::Impl::arccoreCheckIsValidInteger(size);
269 Arcane::Impl::arccoreCheckIsPositive(size);
270 return static_cast<Integer>(size);
280inline constexpr ARCCORE_HOST_DEVICE Int64
283 Arcane::Impl::arccoreCheckIsValidInt64(size);
284 return static_cast<Int64>(size);
298 template <
typename SizeType> ARCCORE_HOST_DEVICE
static Int32 check(SizeType size)
310 static ARCCORE_HOST_DEVICE
Int64 check(std::size_t size)
324namespace Arccore::impl
326using Arcane::Impl::arccoreCheckIsPositive;
327using Arcane::Impl::arccoreCheckIsValidInt64;
328using Arcane::Impl::arccoreCheckIsValidInteger;
329using Arcane::Impl::arccoreThrowNegativeSize;
330using Arcane::Impl::arccoreThrowTooBigInt64;
331using Arcane::Impl::arccoreThrowTooBigInteger;
332using Arcane::Impl::areEqual;
333using Arcane::Impl::areEqual2D;
334using Arcane::Impl::dumpArray;
335using Arcane::Impl::subViewInterval;
#define ARCCORE_INTEGER_MAX
Macro indicating the maximum value that the Integer type can take.
Helper class to dump an array view on a stream.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
constexpr __host__ __device__ Integer arccoreCheckArraySize(unsigned long long size)
Checks that size can be converted into an 'Integer' to serve as an array size. If possible,...
std::int64_t Int64
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
void dumpArray(std::ostream &o, ConstArrayView< T > val, int max_print)
Displays the values of array val to the stream o.
constexpr __host__ __device__ Int64 arccoreCheckLargeArraySize(size_t size)
Checks that size can be converted into an 'Int64' to serve as an array size.
std::int32_t Int32
Signed integer type of 32 bits.