32 #ifndef UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_EXTRACT_ACCESSOR_HPP
33 #define UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_EXTRACT_ACCESSOR_HPP
36 namespace TensorSycl {
42 template <
typename Evaluator>
43 struct ExtractAccessor;
45 struct AccessorConstructor{
46 template<
typename Arg>
static inline auto getTuple(cl::sycl::handler& cgh, Arg eval)
47 -> decltype(ExtractAccessor<Arg>::getTuple(cgh, eval)) {
48 return ExtractAccessor<Arg>::getTuple(cgh, eval);
51 template<
typename Arg1,
typename Arg2>
static inline auto getTuple(cl::sycl::handler& cgh, Arg1 eval1, Arg2 eval2)
52 -> decltype(
utility::tuple::append(ExtractAccessor<Arg1>::getTuple(cgh, eval1), ExtractAccessor<Arg2>::getTuple(cgh, eval2))) {
53 return utility::tuple::append(ExtractAccessor<Arg1>::getTuple(cgh, eval1), ExtractAccessor<Arg2>::getTuple(cgh, eval2));
55 template<
typename Arg1,
typename Arg2,
typename Arg3>
static inline auto getTuple(cl::sycl::handler& cgh, Arg1 eval1 , Arg2 eval2 , Arg3 eval3)
59 template< cl::sycl::access::mode AcM,
typename Arg>
static inline auto getAccessor(cl::sycl::handler& cgh, Arg eval)
68 template <
template<
class,
class>
class UnaryCategory,
typename OP,
typename RHSExpr,
typename Dev>
69 struct ExtractAccessor<TensorEvaluator<const UnaryCategory<
OP, RHSExpr>, Dev> > {
70 static inline auto getTuple(cl::sycl::handler& cgh,
const TensorEvaluator<
const UnaryCategory<OP, RHSExpr>, Dev> eval)
77 template <
template<
class,
class>
class UnaryCategory,
typename OP,
typename RHSExpr,
typename Dev>
78 struct ExtractAccessor<TensorEvaluator<UnaryCategory<
OP, RHSExpr>, Dev> >
79 : ExtractAccessor<TensorEvaluator<const UnaryCategory<OP, RHSExpr>, Dev> > {};
82 template <
template<
class,
class,
class>
class BinaryCategory,
typename OP,
typename LHSExpr,
typename RHSExpr,
typename Dev>
83 struct ExtractAccessor<TensorEvaluator<const BinaryCategory<
OP, LHSExpr, RHSExpr>, Dev> > {
84 static inline auto getTuple(cl::sycl::handler& cgh,
const TensorEvaluator<
const BinaryCategory<OP, LHSExpr, RHSExpr>, Dev> eval)
90 template <
template<
class,
class,
class>
class BinaryCategory,
typename OP,
typename LHSExpr,
typename RHSExpr,
typename Dev>
91 struct ExtractAccessor<TensorEvaluator<BinaryCategory<
OP, LHSExpr, RHSExpr>, Dev> >
92 : ExtractAccessor<TensorEvaluator<const BinaryCategory<OP, LHSExpr, RHSExpr>, Dev> >{};
96 template <
template<
class,
class,
class,
class>
class TernaryCategory,
typename OP,
typename Arg1Expr,
typename Arg2Expr,
typename Arg3Expr,
typename Dev>
98 static inline auto getTuple(cl::sycl::handler& cgh,
const TensorEvaluator<
const TernaryCategory<OP, Arg1Expr, Arg2Expr, Arg3Expr>, Dev> eval)
105 template <
template<
class,
class,
class,
class>
class TernaryCategory,
typename OP,
typename Arg1Expr,
typename Arg2Expr,
typename Arg3Expr,
typename Dev>
107 :
ExtractAccessor<TensorEvaluator<const TernaryCategory<OP, Arg1Expr, Arg2Expr, Arg3Expr>, Dev> >{};
111 template <
typename IfExpr,
typename ThenExpr,
typename ElseExpr,
typename Dev>
121 template <
typename IfExpr,
typename ThenExpr,
typename ElseExpr,
typename Dev>
123 :
ExtractAccessor<TensorEvaluator<const TensorSelectOp<IfExpr, ThenExpr, ElseExpr>, Dev> >{};
126 template <
typename LHSExpr,
typename RHSExpr,
typename Dev>
135 template <
typename LHSExpr,
typename RHSExpr,
typename Dev>
137 :
ExtractAccessor<TensorEvaluator<const TensorAssignOp<LHSExpr, RHSExpr>, Dev> >{};
140 #define TENSORMAPEXPR(CVQual, ACCType)\
141 template <typename PlainObjectType, int Options_, typename Dev>\
142 struct ExtractAccessor<TensorEvaluator<CVQual TensorMap<PlainObjectType, Options_>, Dev> > {\
143 static inline auto getTuple(cl::sycl::handler& cgh,const TensorEvaluator<CVQual TensorMap<PlainObjectType, Options_>, Dev> eval)\
144 -> decltype(AccessorConstructor::template getAccessor<ACCType>(cgh, eval)){\
145 return AccessorConstructor::template getAccessor<ACCType>(cgh, eval);\
153 template <
typename Expr,
typename Dev>
156 -> decltype(AccessorConstructor::template getAccessor<cl::sycl::access::mode::read>(cgh, eval)){
157 return AccessorConstructor::template getAccessor<cl::sycl::access::mode::read>(cgh, eval);
162 template <
typename Expr,
typename Dev>
167 template <
typename Expr,
typename Dev>
176 template <
typename Expr,
typename Dev>
181 template <
typename OP,
typename Dim,
typename Expr,
typename Dev>
184 -> decltype(AccessorConstructor::template getAccessor<cl::sycl::access::mode::read>(cgh, eval)){
185 return AccessorConstructor::template getAccessor<cl::sycl::access::mode::read>(cgh, eval);
190 template <
typename OP,
typename Dim,
typename Expr,
typename Dev>
191 struct ExtractAccessor<TensorEvaluator<TensorReductionOp<
OP, Dim, Expr>, Dev> >
192 : ExtractAccessor<TensorEvaluator<const TensorReductionOp<OP, Dim, Expr>, Dev> >{};
195 template <
typename Evaluator>
197 -> decltype(ExtractAccessor<Evaluator>::getTuple(cgh, expr)) {
198 return ExtractAccessor<Evaluator>::getTuple(cgh, expr);
204 #endif // UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_EXTRACT_ACCESSOR_HPP