17 template <
int dimensions>
class id;
18 template <
int dimensions>
class range;
21 template <
int dimensions = 1>
class array {
22 static_assert(dimensions >= 1,
"Array cannot be 0-dimensional.");
27 template <
int N = dimensions>
29 : common_array{dim0} {}
33 template <
int N = dimensions>
35 : common_array{dim0, dim1} {}
37 template <
int N = dimensions, detail::enable_if_t<(N == 2),
size_t> = 0>
42 template <
int N = dimensions>
45 : common_array{dim0, dim1, dim2} {}
47 template <
int N = dimensions, detail::enable_if_t<(N == 3),
size_t> = 0>
51 operator sycl::id<dimensions>()
const {
52 sycl::id<dimensions> result;
53 for (
int i = 0; i < dimensions; ++i) {
54 result[i] = common_array[i];
59 operator sycl::range<dimensions>()
const {
60 sycl::range<dimensions> result;
61 for (
int i = 0; i < dimensions; ++i) {
62 result[i] = common_array[i];
67 size_t get(
int dimension)
const {
68 check_dimension(dimension);
69 return common_array[dimension];
73 check_dimension(dimension);
74 return common_array[dimension];
78 check_dimension(dimension);
79 return common_array[dimension];
90 for (
int i = 0; i < dimensions; ++i) {
101 for (
int i = 0; i < dimensions; ++i) {
110 size_t common_array[dimensions];
112 #ifndef __SYCL_DEVICE_ONLY__
113 if (dimension >= dimensions || dimension < 0) {
114 throw sycl::invalid_parameter_error(
"Index out of range",
115 PI_ERROR_INVALID_VALUE);