21 #ifndef UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_TUPLE_HPP 22 #define UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_TUPLE_HPP 28 template <
bool,
typename T =
void>
struct StaticIf;
39 template <
class... Ts>
46 template <
class T,
class... Ts>
48 Tuple(T t, Ts... ts) : head(t), tail(ts...) {}
58 template <
size_t,
class>
63 template <
class T,
class... Ts>
74 template <
size_t k,
class T,
class... Ts>
86 #define TERMINATE_CONDS_TUPLE_GET(CVQual) \ 87 template <size_t k, class... Ts> \ 88 typename StaticIf<k == 0, CVQual typename ElemTypeHolder<0, Tuple<Ts...> >::type &>::type \ 89 get(CVQual Tuple<Ts...> &t) { \ 90 static_assert(sizeof...(Ts)!=0, "The requseted value is bigger than the size of the tuple"); \ 94 TERMINATE_CONDS_TUPLE_GET(
const)
95 TERMINATE_CONDS_TUPLE_GET()
96 #undef TERMINATE_CONDS_TUPLE_GET 97 #define RECURSIVE_TUPLE_GET(CVQual) \ 105 template <size_t k, class T, class... Ts> \ 106 typename StaticIf<k != 0, CVQual typename ElemTypeHolder<k, Tuple<T, Ts...> >::type &>::type \ 107 get(CVQual Tuple<T, Ts...> &t) { \ 108 return utility::tuple::get<k - 1>(t.tail); \ 110 RECURSIVE_TUPLE_GET(
const)
111 RECURSIVE_TUPLE_GET()
112 #undef RECURSIVE_TUPLE_GET 120 template <
typename... Args>
121 Tuple<Args...> make_tuple(Args... args) {
122 return Tuple<Args...>(args...);
130 template <
typename... Args>
132 return sizeof...(Args);
138 template <
size_t... Is>
147 template <
size_t MIN,
size_t N,
size_t... Is>
154 template <
size_t MIN,
size_t... Is>
165 template <
size_t MIN,
size_t N,
size_t... Is>
171 template <
size_t MIN,
size_t MAX>
183 template <
typename... Args,
typename T,
size_t... I>
185 return utility::tuple::make_tuple(get<I>(t)..., a);
196 template <
typename... Args,
typename T>
198 return utility::tuple::append_base(t, a,
IndexRange<0,
sizeof...(Args)>());
214 template <
typename... Args1,
typename... Args2,
size_t... I1,
size_t... I2>
216 return utility::tuple::make_tuple(get<I1>(t1)...,get<I2>(t2)...);
228 template <
typename... Args1,
typename... Args2>
230 return utility::tuple::append_base(t1, t2,
IndexRange<0,
sizeof...(Args1)>(),
IndexRange<0,
sizeof...(Args2)>());
234 #endif // UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_TUPLE_HPP The StaticIf struct is used to statically choose the type based on the condition. ...
Definition: TensorSyclTuple.h:28
ElemTypeHolder class is used to specify the types of the elements inside the tuple.
Definition: TensorSyclTuple.h:59
Collects internal details for generating index ranges [MIN, MAX) Declare primary template for index r...
Definition: TensorSyclTuple.h:148
IndexRange that returns a [MIN, MAX) index range.
Definition: TensorSyclTuple.h:172
is a fixed-size collection of heterogeneous values Ts... - the types of the elements that the tuple ...
Definition: TensorSyclTuple.h:40
Definition: TensorSyclTuple.h:23
Creates a list of index from the elements in the tuple.
Definition: TensorSyclTuple.h:139