aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-06-29 10:49:55 -0700
committerGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-06-29 10:49:55 -0700
commit3625734bc8e63b4ccb4c190d170fd5d29fba5b54 (patch)
tree802298cb02cda49d1d786b8b850af633d29fbe16 /unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h
parent392a30db824161a0466f7970e12e5a48ed05ebd9 (diff)
Moved some utilities to TensorMeta.h to make it easier to reuse them accross several tensor operations.
Created the TensorDimensionList class to encode the list of all the dimensions of a tensor of rank n. This could be done using TensorIndexList, however TensorIndexList require cxx11 which isn't yet supported as widely as we'd like.
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h')
-rw-r--r--unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h33
1 files changed, 6 insertions, 27 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h b/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h
index 270383020..fd2f3abc4 100644
--- a/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h
+++ b/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h
@@ -364,14 +364,6 @@ class TensorContractionInputMapper<Scalar, Index, side, Tensor, nocontract_t, co
};
-template <size_t n> struct max_n_1 {
- static const size_t size = n;
-};
-template <> struct max_n_1<0> {
- static const size_t size = 1;
-};
-
-
template<typename Dimensions, typename LhsXprType, typename RhsXprType>
struct traits<TensorContractionOp<Dimensions, LhsXprType, RhsXprType> >
{
@@ -459,19 +451,6 @@ class TensorContractionOp : public TensorBase<TensorContractionOp<Indices, LhsXp
};
-template<bool cond> struct Cond {};
-
-template<typename T1, typename T2> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
-const T1& choose(Cond<true>, const T1& first, const T2&) {
- return first;
-}
-
-template<typename T1, typename T2> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
-const T2& choose(Cond<false>, const T1&, const T2& second) {
- return second;
-}
-
-
template<typename Derived>
struct TensorContractionEvaluatorBase
{
@@ -508,13 +487,13 @@ struct TensorContractionEvaluatorBase
static const int RDims =
internal::array_size<typename TensorEvaluator<EvalRightArgType, Device>::Dimensions>::value;
static const unsigned int ContractDims = internal::array_size<Indices>::value;
- static const int NumDims = internal::max_n_1<LDims + RDims - 2 * ContractDims>::size;
+ static const int NumDims = max_n_1<LDims + RDims - 2 * ContractDims>::size;
typedef array<Index, LDims> left_dim_mapper_t;
typedef array<Index, RDims> right_dim_mapper_t;
typedef array<Index, ContractDims> contract_t;
- typedef array<Index, internal::max_n_1<LDims - ContractDims>::size> left_nocontract_t;
- typedef array<Index, internal::max_n_1<RDims - ContractDims>::size> right_nocontract_t;
+ typedef array<Index, max_n_1<LDims - ContractDims>::size> left_nocontract_t;
+ typedef array<Index, max_n_1<RDims - ContractDims>::size> right_nocontract_t;
typedef DSizes<Index, NumDims> Dimensions;
@@ -869,10 +848,10 @@ struct TensorEvaluator<const TensorContractionOp<Indices, LeftArgType, RightArgT
typedef array<Index, RDims> right_dim_mapper_t;
typedef array<Index, ContractDims> contract_t;
- typedef array<Index, internal::max_n_1<LDims - ContractDims>::size> left_nocontract_t;
- typedef array<Index, internal::max_n_1<RDims - ContractDims>::size> right_nocontract_t;
+ typedef array<Index, max_n_1<LDims - ContractDims>::size> left_nocontract_t;
+ typedef array<Index, max_n_1<RDims - ContractDims>::size> right_nocontract_t;
- static const int NumDims = internal::max_n_1<LDims + RDims - 2 * ContractDims>::size;
+ static const int NumDims = max_n_1<LDims + RDims - 2 * ContractDims>::size;
// Could we use NumDimensions here?
typedef DSizes<Index, NumDims> Dimensions;