16 #include <type_traits>
19 inline namespace _V1 {
20 template <
int Dimensions>
class id;
32 "range can only be 1, 2, or 3 Dimensional.");
34 template <
typename N,
typename T>
35 using IntegralType = std::enable_if_t<std::is_integral_v<N>, T>;
40 template <
int N = Dimensions>
41 range(
typename std::enable_if_t<(N == 1),
size_t> dim0) :
base(dim0) {}
45 template <
int N = Dimensions>
46 range(
typename std::enable_if_t<(N == 2),
size_t> dim0,
size_t dim1)
51 template <
int N = Dimensions>
52 range(
typename std::enable_if_t<(N == 3),
size_t> dim0,
size_t dim1,
54 :
base(dim0, dim1, dim2) {}
71 #define __SYCL_GEN_OPT_BASE(op) \
72 friend range<Dimensions> operator op(const range<Dimensions> &lhs, \
73 const range<Dimensions> &rhs) { \
74 range<Dimensions> result(lhs); \
75 for (int i = 0; i < Dimensions; ++i) { \
76 result.common_array[i] = lhs.common_array[i] op rhs.common_array[i]; \
81 #ifndef __SYCL_DISABLE_ID_TO_INT_CONV__
83 #define __SYCL_GEN_OPT(op) \
84 __SYCL_GEN_OPT_BASE(op) \
85 template <typename T> \
86 friend IntegralType<T, range<Dimensions>> operator op( \
87 const range<Dimensions> &lhs, const T &rhs) { \
88 range<Dimensions> result(lhs); \
89 for (int i = 0; i < Dimensions; ++i) { \
90 result.common_array[i] = lhs.common_array[i] op rhs; \
94 template <typename T> \
95 friend IntegralType<T, range<Dimensions>> operator op( \
96 const T &lhs, const range<Dimensions> &rhs) { \
97 range<Dimensions> result(rhs); \
98 for (int i = 0; i < Dimensions; ++i) { \
99 result.common_array[i] = lhs op rhs.common_array[i]; \
104 #define __SYCL_GEN_OPT(op) \
105 __SYCL_GEN_OPT_BASE(op) \
106 friend range<Dimensions> operator op(const range<Dimensions> &lhs, \
107 const size_t &rhs) { \
108 range<Dimensions> result(lhs); \
109 for (int i = 0; i < Dimensions; ++i) { \
110 result.common_array[i] = lhs.common_array[i] op rhs; \
114 friend range<Dimensions> operator op(const size_t &lhs, \
115 const range<Dimensions> &rhs) { \
116 range<Dimensions> result(rhs); \
117 for (int i = 0; i < Dimensions; ++i) { \
118 result.common_array[i] = lhs op rhs.common_array[i]; \
141 #undef __SYCL_GEN_OPT
142 #undef __SYCL_GEN_OPT_BASE
145 #define __SYCL_GEN_OPT(op) \
146 friend range<Dimensions> &operator op(range<Dimensions> &lhs, \
147 const range<Dimensions> &rhs) { \
148 for (int i = 0; i < Dimensions; ++i) { \
149 lhs.common_array[i] op rhs[i]; \
153 friend range<Dimensions> &operator op(range<Dimensions> &lhs, \
154 const size_t &rhs) { \
155 for (int i = 0; i < Dimensions; ++i) { \
156 lhs.common_array[i] op rhs; \
172 #undef __SYCL_GEN_OPT
175 #define __SYCL_GEN_OPT(op) \
176 friend range<Dimensions> operator op(const range<Dimensions> &rhs) { \
177 range<Dimensions> result(rhs); \
178 for (int i = 0; i < Dimensions; ++i) { \
179 result.common_array[i] = (op rhs.common_array[i]); \
187 #undef __SYCL_GEN_OPT
190 #define __SYCL_GEN_OPT(op) \
191 friend range<Dimensions> &operator op(range<Dimensions> &rhs) { \
192 for (int i = 0; i < Dimensions; ++i) { \
193 op rhs.common_array[i]; \
201 #undef __SYCL_GEN_OPT
204 #define __SYCL_GEN_OPT(op) \
205 friend range<Dimensions> operator op(range<Dimensions> &lhs, int) { \
206 range<Dimensions> old_lhs(lhs); \
207 for (int i = 0; i < Dimensions; ++i) { \
208 op lhs.common_array[i]; \
216 #undef __SYCL_GEN_OPT
223 void set_range_dim0(
const size_t dim0) { this->
common_array[0] = dim0; }
226 #ifdef __cpp_deduction_guides
235 return {
r[0],
r[1],
r[2]};
238 return {
r[0],
r[1], 0};
size_t common_array[dimensions]
size_t get(int dimension) const
Command group handler class.
Defines the iteration domain of either a single work-group in a parallel dispatch,...
range< Dimensions > & operator=(range< Dimensions > &&rhs)=default
range(typename std::enable_if_t<(N==3), size_t > dim0, size_t dim1, size_t dim2)
range(typename std::enable_if_t<(N==2), size_t > dim0, size_t dim1)
range(typename std::enable_if_t<(N==1), size_t > dim0)
range(range< Dimensions > &&rhs)=default
range< Dimensions > & operator=(const range< Dimensions > &rhs)=default
range(const range< Dimensions > &rhs)=default
static constexpr int dimensions
std::array< size_t, 3 > rangeToArray(const range< 3 > &r)
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
#define __SYCL_GEN_OPT(op)