Loading...
Searching...
No Matches
TensorSyclLeafCount.h
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Mehdi Goli Codeplay Software Ltd.
5// Ralph Potter Codeplay Software Ltd.
6// Luke Iwanski Codeplay Software Ltd.
7// Contact: <eigen@codeplay.com>
8//
9// This Source Code Form is subject to the terms of the Mozilla
10// Public License v. 2.0. If a copy of the MPL was not distributed
11// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
12
13/*****************************************************************
14 * TensorSyclLeafCount.h
15 *
16 * \brief:
17 * The leaf count used the pre-order expression tree traverse in order to name
18 * count the number of leaf nodes in the expression
19 *
20*****************************************************************/
21
22#ifndef UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_LEAF_COUNT_HPP
23#define UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_LEAF_COUNT_HPP
24
25namespace Eigen {
26namespace TensorSycl {
27namespace internal {
31template <typename Expr>
32struct LeafCount;
33
34template<typename... Args> struct CategoryCount;
35
36template<> struct CategoryCount<>
37{
38 static const size_t Count =0;
39};
40
41template<typename Arg, typename... Args>
42struct CategoryCount<Arg,Args...>{
43 static const size_t Count = LeafCount<Arg>::Count + CategoryCount<Args...>::Count;
44};
45
47template <typename PlainObjectType, int Options_, template <class> class MakePointer_>
48struct LeafCount<const TensorMap<PlainObjectType, Options_, MakePointer_> > {
49 static const size_t Count =1;
50};
51
53template <typename PlainObjectType, int Options_, template <class> class MakePointer_>
54struct LeafCount<TensorMap<PlainObjectType, Options_, MakePointer_> > :LeafCount<const TensorMap<PlainObjectType, Options_, MakePointer_> >{};
55
56// const TensorCwiseUnaryOp, const TensorCwiseNullaryOp, const TensorCwiseBinaryOp, const TensorCwiseTernaryOp, and Const TensorBroadcastingOp
57template <template <class, class...> class CategoryExpr, typename OP, typename... RHSExpr>
58struct LeafCount<const CategoryExpr<OP, RHSExpr...> >: CategoryCount<RHSExpr...> {};
59// TensorCwiseUnaryOp, TensorCwiseNullaryOp, TensorCwiseBinaryOp, TensorCwiseTernaryOp, and TensorBroadcastingOp
60template <template <class, class...> class CategoryExpr, typename OP, typename... RHSExpr>
61struct LeafCount<CategoryExpr<OP, RHSExpr...> > :LeafCount<const CategoryExpr<OP, RHSExpr...> >{};
62
64template <typename IfExpr, typename ThenExpr, typename ElseExpr>
65struct LeafCount<const TensorSelectOp<IfExpr, ThenExpr, ElseExpr> > : CategoryCount<IfExpr, ThenExpr, ElseExpr> {};
67template <typename IfExpr, typename ThenExpr, typename ElseExpr>
68struct LeafCount<TensorSelectOp<IfExpr, ThenExpr, ElseExpr> >: LeafCount<const TensorSelectOp<IfExpr, ThenExpr, ElseExpr> > {};
69
70
72template <typename LHSExpr, typename RHSExpr>
73struct LeafCount<const TensorAssignOp<LHSExpr, RHSExpr> >: CategoryCount<LHSExpr,RHSExpr> {};
74
77template <typename LHSExpr, typename RHSExpr>
78struct LeafCount<TensorAssignOp<LHSExpr, RHSExpr> > :LeafCount<const TensorAssignOp<LHSExpr, RHSExpr> >{};
79
81template <typename Expr>
82struct LeafCount<const TensorForcedEvalOp<Expr> > {
83 static const size_t Count =1;
84};
85
87template <typename Expr>
88struct LeafCount<TensorForcedEvalOp<Expr> >: LeafCount<const TensorForcedEvalOp<Expr> > {};
89
91template <typename Expr>
92struct LeafCount<const TensorEvalToOp<Expr> > {
93 static const size_t Count = 1 + CategoryCount<Expr>::Count;
94};
95
97template <typename OP, typename Dim, typename Expr>
98struct LeafCount<const TensorReductionOp<OP, Dim, Expr> > {
99 static const size_t Count =1;
100};
101
103template <typename OP, typename Dim, typename Expr>
104struct LeafCount<TensorReductionOp<OP, Dim, Expr> >: LeafCount<const TensorReductionOp<OP, Dim, Expr> >{};
105
107template <typename Expr>
108struct LeafCount<TensorEvalToOp<Expr> >: LeafCount<const TensorEvalToOp<Expr> >{};
109
110}
111}
112}
113
114#endif // UNSUPPORTED_EIGEN_CXX11_SRC_TENSOR_TENSORSYCL_LEAF_COUNT_HPP
Namespace containing all symbols from the Eigen library.
Definition: AdolcForward:45