22 #ifndef UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_PLACEHOLDER_EXPR_HPP 23 #define UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_PLACEHOLDER_EXPR_HPP 26 namespace TensorSycl {
33 template <
typename Scalar,
size_t N>
35 static constexpr
size_t I = N;
43 template <
typename Expr,
size_t N>
44 struct PlaceHolderExpression;
46 template<
size_t N,
typename... Args>
47 struct CalculateIndex;
49 template<
size_t N,
typename Arg>
50 struct CalculateIndex<N, Arg>{
51 typedef typename PlaceHolderExpression<Arg, N>::Type ArgType;
55 template<
size_t N,
typename Arg1,
typename Arg2>
56 struct CalculateIndex<N, Arg1, Arg2>{
57 static const size_t Arg2LeafCount = LeafCount<Arg2>::Count;
58 typedef typename PlaceHolderExpression<Arg1, N - Arg2LeafCount>::Type Arg1Type;
59 typedef typename PlaceHolderExpression<Arg2, N>::Type Arg2Type;
63 template<
size_t N,
typename Arg1,
typename Arg2,
typename Arg3>
64 struct CalculateIndex<N, Arg1, Arg2, Arg3> {
65 static const size_t Arg3LeafCount = LeafCount<Arg3>::Count;
66 static const size_t Arg2LeafCount = LeafCount<Arg2>::Count;
67 typedef typename PlaceHolderExpression<Arg1, N - Arg3LeafCount - Arg2LeafCount>::Type Arg1Type;
68 typedef typename PlaceHolderExpression<Arg2, N - Arg3LeafCount>::Type Arg2Type;
69 typedef typename PlaceHolderExpression<Arg3, N>::Type Arg3Type;
73 template<
template<
class...>
class Category ,
class OP,
class TPL>
74 struct CategoryHelper;
76 template<
template<
class...>
class Category ,
class OP,
class ...T >
77 struct CategoryHelper<Category, OP,
utility::tuple::Tuple<T...> > {
78 typedef Category<OP, T... > Type;
81 template<
template<
class...>
class Category ,
class ...T >
82 struct CategoryHelper<Category, NoOP,
utility::tuple::Tuple<T...> > {
83 typedef Category<T... > Type;
88 #define OPEXPRCATEGORY(CVQual)\ 89 template <template <class, class... > class Category, typename OP, typename... SubExpr, size_t N>\ 90 struct PlaceHolderExpression<CVQual Category<OP, SubExpr...>, N>{\ 91 typedef CVQual typename CategoryHelper<Category, OP, typename CalculateIndex<N, SubExpr...>::ArgsTuple>::Type Type;\ 100 #define SELECTEXPR(CVQual)\ 101 template <typename IfExpr, typename ThenExpr, typename ElseExpr, size_t N>\ 102 struct PlaceHolderExpression<CVQual TensorSelectOp<IfExpr, ThenExpr, ElseExpr>, N> {\ 103 typedef CVQual typename CategoryHelper<TensorSelectOp, NoOP, typename CalculateIndex<N, IfExpr, ThenExpr, ElseExpr>::ArgsTuple>::Type Type;\ 112 #define ASSIGNEXPR(CVQual)\ 113 template <typename LHSExpr, typename RHSExpr, size_t N>\ 114 struct PlaceHolderExpression<CVQual TensorAssignOp<LHSExpr, RHSExpr>, N> {\ 115 typedef CVQual typename CategoryHelper<TensorAssignOp, NoOP, typename CalculateIndex<N, LHSExpr, RHSExpr>::ArgsTuple>::Type Type;\ 124 #define TENSORMAPEXPR(CVQual)\ 125 template <typename Scalar_, int Options_, int Options2_, int NumIndices_, typename IndexType_, template <class> class MakePointer_, size_t N>\ 126 struct PlaceHolderExpression< CVQual TensorMap< Tensor<Scalar_, NumIndices_, Options_, IndexType_>, Options2_, MakePointer_>, N> {\ 127 typedef CVQual PlaceHolder<CVQual TensorMap<Tensor<Scalar_, NumIndices_, Options_, IndexType_>, Options2_, MakePointer_>, N> Type;\ 136 #define FORCEDEVAL(CVQual)\ 137 template <typename Expr, size_t N>\ 138 struct PlaceHolderExpression<CVQual TensorForcedEvalOp<Expr>, N> {\ 139 typedef CVQual PlaceHolder<CVQual TensorForcedEvalOp<Expr>, N> Type;\ 148 #define EVALTO(CVQual)\ 149 template <typename Expr, size_t N>\ 150 struct PlaceHolderExpression<CVQual TensorEvalToOp<Expr>, N> {\ 151 typedef CVQual TensorEvalToOp<typename CalculateIndex <N, Expr>::ArgType> Type;\ 161 #define SYCLREDUCTION(CVQual)\ 162 template <typename OP, typename Dims, typename Expr, size_t N>\ 163 struct PlaceHolderExpression<CVQual TensorReductionOp<OP, Dims, Expr>, N>{\ 164 typedef CVQual PlaceHolder<CVQual TensorReductionOp<OP, Dims,Expr>, N> Type;\ 171 template <
typename Expr>
172 struct createPlaceHolderExpression {
173 static const size_t TotalLeaves = LeafCount<Expr>::Count;
174 typedef typename PlaceHolderExpression<Expr, TotalLeaves - 1>::Type Type;
181 #endif // UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_PLACEHOLDER_EXPR_HPP Namespace containing all symbols from the Eigen library.
Definition: AdolcForward:45
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