14 #include <type_traits>
18 template <
int dimensions>
class id;
25 static_assert(dimensions >= 1 && dimensions <= 3,
26 "range can only be 1, 2, or 3 dimensional.");
28 template <
typename N,
typename T>
34 template <
int N = dimensions>
39 template <
int N = dimensions>
45 template <
int N = dimensions>
48 :
base(dim0, dim1, dim2) {}
52 for (
int i = 0; i < dimensions; ++i) {
65 #define __SYCL_GEN_OPT_BASE(op) \
66 friend range<dimensions> operator op(const range<dimensions> &lhs, \
67 const range<dimensions> &rhs) { \
68 range<dimensions> result(lhs); \
69 for (int i = 0; i < dimensions; ++i) { \
70 result.common_array[i] = lhs.common_array[i] op rhs.common_array[i]; \
75 #ifndef __SYCL_DISABLE_ID_TO_INT_CONV__
77 #define __SYCL_GEN_OPT(op) \
78 __SYCL_GEN_OPT_BASE(op) \
79 template <typename T> \
80 friend IntegralType<T, range<dimensions>> operator op( \
81 const range<dimensions> &lhs, const T &rhs) { \
82 range<dimensions> result(lhs); \
83 for (int i = 0; i < dimensions; ++i) { \
84 result.common_array[i] = lhs.common_array[i] op rhs; \
88 template <typename T> \
89 friend IntegralType<T, range<dimensions>> operator op( \
90 const T &lhs, const range<dimensions> &rhs) { \
91 range<dimensions> result(rhs); \
92 for (int i = 0; i < dimensions; ++i) { \
93 result.common_array[i] = lhs op rhs.common_array[i]; \
98 #define __SYCL_GEN_OPT(op) \
99 __SYCL_GEN_OPT_BASE(op) \
100 friend range<dimensions> operator op(const range<dimensions> &lhs, \
101 const size_t &rhs) { \
102 range<dimensions> result(lhs); \
103 for (int i = 0; i < dimensions; ++i) { \
104 result.common_array[i] = lhs.common_array[i] op rhs; \
108 friend range<dimensions> operator op(const size_t &lhs, \
109 const range<dimensions> &rhs) { \
110 range<dimensions> result(rhs); \
111 for (int i = 0; i < dimensions; ++i) { \
112 result.common_array[i] = lhs op rhs.common_array[i]; \
135 #undef __SYCL_GEN_OPT
136 #undef __SYCL_GEN_OPT_BASE
139 #define __SYCL_GEN_OPT(op) \
140 friend range<dimensions> &operator op(range<dimensions> &lhs, \
141 const range<dimensions> &rhs) { \
142 for (int i = 0; i < dimensions; ++i) { \
143 lhs.common_array[i] op rhs[i]; \
147 friend range<dimensions> &operator op(range<dimensions> &lhs, \
148 const size_t &rhs) { \
149 for (int i = 0; i < dimensions; ++i) { \
150 lhs.common_array[i] op rhs; \
166 #undef __SYCL_GEN_OPT
169 #define __SYCL_GEN_OPT(op) \
170 friend range<dimensions> operator op(const range<dimensions> &rhs) { \
171 range<dimensions> result(rhs); \
172 for (int i = 0; i < dimensions; ++i) { \
173 result.common_array[i] = (op rhs.common_array[i]); \
181 #undef __SYCL_GEN_OPT
184 #define __SYCL_GEN_OPT(op) \
185 friend range<dimensions> &operator op(range<dimensions> &rhs) { \
186 for (int i = 0; i < dimensions; ++i) { \
187 op rhs.common_array[i]; \
195 #undef __SYCL_GEN_OPT
198 #define __SYCL_GEN_OPT(op) \
199 friend range<dimensions> operator op(range<dimensions> &lhs, int) { \
200 range<dimensions> old_lhs(lhs); \
201 for (int i = 0; i < dimensions; ++i) { \
202 op lhs.common_array[i]; \
210 #undef __SYCL_GEN_OPT
217 void set_range_dim0(
const size_t dim0) { this->common_array[0] = dim0; }
220 #ifdef __cpp_deduction_guides
221 range(
size_t)->range<1>;
222 range(
size_t,
size_t)->range<2>;
223 range(
size_t,
size_t,
size_t)->range<3>;
Command group handler class.
Defines the iteration domain of either a single work-group in a parallel dispatch,...
range(typename detail::enable_if_t<(N==1), size_t > dim0)
range(typename detail::enable_if_t<(N==3), size_t > dim0, size_t dim1, size_t dim2)
range< dimensions > & operator=(range< dimensions > &&rhs)=default
range(const range< dimensions > &rhs)=default
range(range< dimensions > &&rhs)=default
range(typename detail::enable_if_t<(N==2), size_t > dim0, size_t dim1)
range< dimensions > & operator=(const range< dimensions > &rhs)=default
#define __SYCL_INLINE_VER_NAMESPACE(X)
constexpr tuple_element< I, tuple< Types... > >::type & get(sycl::detail::tuple< Types... > &Arg) noexcept
typename std::enable_if< B, T >::type enable_if_t
---— Error handling, matching OpenCL plugin semantics.
#define __SYCL_GEN_OPT(op)