diff options
author | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2015-06-29 10:49:55 -0700 |
---|---|---|
committer | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2015-06-29 10:49:55 -0700 |
commit | 3625734bc8e63b4ccb4c190d170fd5d29fba5b54 (patch) | |
tree | 802298cb02cda49d1d786b8b850af633d29fbe16 /unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h | |
parent | 392a30db824161a0466f7970e12e5a48ed05ebd9 (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.h | 33 |
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; |