diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-09-02 21:38:40 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-09-02 21:38:40 +0200 |
commit | 92b9f0e102b35c3091bdeea3fc65f38f0e93c612 (patch) | |
tree | a94a71fd6166d8f54e0ac74d6bd8afe4145754a6 /Eigen/src/Core | |
parent | cda55ab245aa40aacb1fc2030c5eb475afd182ad (diff) |
Cleaning pass on evaluators: remove the useless and error prone evaluator<>::type indirection.
Diffstat (limited to 'Eigen/src/Core')
-rw-r--r-- | Eigen/src/Core/AssignEvaluator.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/BooleanRedux.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/CoreEvaluators.h | 25 | ||||
-rw-r--r-- | Eigen/src/Core/CoreIterators.h | 6 | ||||
-rw-r--r-- | Eigen/src/Core/DenseCoeffsBase.h | 12 | ||||
-rw-r--r-- | Eigen/src/Core/Inverse.h | 5 | ||||
-rw-r--r-- | Eigen/src/Core/Product.h | 6 | ||||
-rwxr-xr-x | Eigen/src/Core/ProductEvaluators.h | 15 | ||||
-rw-r--r-- | Eigen/src/Core/ReturnByValue.h | 5 | ||||
-rw-r--r-- | Eigen/src/Core/Solve.h | 5 | ||||
-rw-r--r-- | Eigen/src/Core/TriangularMatrix.h | 5 |
11 files changed, 40 insertions, 52 deletions
diff --git a/Eigen/src/Core/AssignEvaluator.h b/Eigen/src/Core/AssignEvaluator.h index 2b00d355b..c4ba60d6d 100644 --- a/Eigen/src/Core/AssignEvaluator.h +++ b/Eigen/src/Core/AssignEvaluator.h @@ -647,8 +647,8 @@ EIGEN_DEVICE_FUNC void call_dense_assignment_loop(const DstXprType& dst, const S { eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); - typedef typename evaluator<DstXprType>::type DstEvaluatorType; - typedef typename evaluator<SrcXprType>::type SrcEvaluatorType; + typedef evaluator<DstXprType> DstEvaluatorType; + typedef evaluator<SrcXprType> SrcEvaluatorType; DstEvaluatorType dstEvaluator(dst); SrcEvaluatorType srcEvaluator(src); diff --git a/Eigen/src/Core/BooleanRedux.h b/Eigen/src/Core/BooleanRedux.h index 31fbb9214..ba45cf5c3 100644 --- a/Eigen/src/Core/BooleanRedux.h +++ b/Eigen/src/Core/BooleanRedux.h @@ -80,7 +80,7 @@ struct any_unroller<Derived, Dynamic> template<typename Derived> inline bool DenseBase<Derived>::all() const { - typedef typename internal::evaluator<Derived>::type Evaluator; + typedef internal::evaluator<Derived> Evaluator; enum { unroll = SizeAtCompileTime != Dynamic && Evaluator::CoeffReadCost != Dynamic @@ -106,7 +106,7 @@ inline bool DenseBase<Derived>::all() const template<typename Derived> inline bool DenseBase<Derived>::any() const { - typedef typename internal::evaluator<Derived>::type Evaluator; + typedef internal::evaluator<Derived> Evaluator; enum { unroll = SizeAtCompileTime != Dynamic && Evaluator::CoeffReadCost != Dynamic diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h index 26df269a0..1541f940e 100644 --- a/Eigen/src/Core/CoreEvaluators.h +++ b/Eigen/src/Core/CoreEvaluators.h @@ -59,11 +59,6 @@ template< typename T, template<typename T> struct evaluator_traits_base { - // TODO check whether these two indirections are really needed. - // Basically, if nobody overwrite type and nestedType, then, they can be dropped -// typedef evaluator<T> type; -// typedef evaluator<T> nestedType; - // by default, get evaluator kind and shape from storage typedef typename storage_kind_to_evaluator_kind<typename traits<T>::StorageKind>::Kind Kind; typedef typename storage_kind_to_shape<typename traits<T>::StorageKind>::Shape Shape; @@ -90,25 +85,26 @@ struct evaluator : public unary_evaluator<T> // TODO: Think about const-correctness - template<typename T> struct evaluator<const T> : evaluator<T> -{ }; +{ + typedef evaluator<const T> nestedType; + explicit evaluator(const T& xpr) : evaluator<T>(xpr) {} +}; -// ---------- base class for all writable evaluators ---------- +// ---------- base class for all evaluators ---------- -// TODO this class does not seem to be necessary anymore template<typename ExpressionType> struct evaluator_base { -// typedef typename evaluator_traits<ExpressionType>::type type; -// typedef typename evaluator_traits<ExpressionType>::nestedType nestedType; - typedef evaluator<ExpressionType> type; + // TODO Check whether nestedType is really needed: + // As long as evaluator are non-copyable, there is no reason to make it different. typedef evaluator<ExpressionType> nestedType; // FIXME is it really usefull? typedef typename traits<ExpressionType>::StorageIndex StorageIndex; + // TODO that's not very nice to have to propagate all these traits. They are currently only needed to handle outer,inner indices. typedef traits<ExpressionType> ExpressionTraits; @@ -1332,13 +1328,12 @@ class EvalToTemp template<typename ArgType> struct evaluator<EvalToTemp<ArgType> > - : public evaluator<typename ArgType::PlainObject>::type + : public evaluator<typename ArgType::PlainObject> { typedef EvalToTemp<ArgType> XprType; typedef typename ArgType::PlainObject PlainObject; - typedef typename evaluator<PlainObject>::type Base; + typedef evaluator<PlainObject> Base; - typedef evaluator type; typedef evaluator nestedType; EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) diff --git a/Eigen/src/Core/CoreIterators.h b/Eigen/src/Core/CoreIterators.h index c76bdf68e..4eb42b93a 100644 --- a/Eigen/src/Core/CoreIterators.h +++ b/Eigen/src/Core/CoreIterators.h @@ -34,7 +34,7 @@ class InnerIterator { protected: typedef internal::inner_iterator_selector<XprType, typename internal::evaluator_traits<XprType>::Kind> IteratorType; - typedef typename internal::evaluator<XprType>::type EvaluatorType; + typedef internal::evaluator<XprType> EvaluatorType; typedef typename internal::traits<XprType>::Scalar Scalar; public: /** Construct an iterator over the \a outerId -th row or column of \a xpr */ @@ -74,7 +74,7 @@ template<typename XprType> class inner_iterator_selector<XprType, IndexBased> { protected: - typedef typename evaluator<XprType>::type EvaluatorType; + typedef evaluator<XprType> EvaluatorType; typedef typename traits<XprType>::Scalar Scalar; enum { IsRowMajor = (XprType::Flags&RowMajorBit)==RowMajorBit }; @@ -112,7 +112,7 @@ class inner_iterator_selector<XprType, IteratorBased> { protected: typedef typename evaluator<XprType>::InnerIterator Base; - typedef typename evaluator<XprType>::type EvaluatorType; + typedef evaluator<XprType> EvaluatorType; public: EIGEN_STRONG_INLINE inner_iterator_selector(const EvaluatorType &eval, const Index &outerId, const Index &/*innerSize*/) diff --git a/Eigen/src/Core/DenseCoeffsBase.h b/Eigen/src/Core/DenseCoeffsBase.h index 81b0d6017..9581757f3 100644 --- a/Eigen/src/Core/DenseCoeffsBase.h +++ b/Eigen/src/Core/DenseCoeffsBase.h @@ -97,7 +97,7 @@ class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived> { eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols()); - return typename internal::evaluator<Derived>::type(derived()).coeff(row,col); + return internal::evaluator<Derived>(derived()).coeff(row,col); } EIGEN_DEVICE_FUNC @@ -139,7 +139,7 @@ class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived> coeff(Index index) const { eigen_internal_assert(index >= 0 && index < size()); - return typename internal::evaluator<Derived>::type(derived()).coeff(index); + return internal::evaluator<Derived>(derived()).coeff(index); } @@ -218,7 +218,7 @@ class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived> { typedef typename internal::packet_traits<Scalar>::type DefaultPacketType; eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols()); - return typename internal::evaluator<Derived>::type(derived()).template packet<LoadMode,DefaultPacketType>(row,col); + return internal::evaluator<Derived>(derived()).template packet<LoadMode,DefaultPacketType>(row,col); } @@ -245,7 +245,7 @@ class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived> { typedef typename internal::packet_traits<Scalar>::type DefaultPacketType; eigen_internal_assert(index >= 0 && index < size()); - return typename internal::evaluator<Derived>::type(derived()).template packet<LoadMode,DefaultPacketType>(index); + return internal::evaluator<Derived>(derived()).template packet<LoadMode,DefaultPacketType>(index); } protected: @@ -325,7 +325,7 @@ class DenseCoeffsBase<Derived, WriteAccessors> : public DenseCoeffsBase<Derived, { eigen_internal_assert(row >= 0 && row < rows() && col >= 0 && col < cols()); - return typename internal::evaluator<Derived>::type(derived()).coeffRef(row,col); + return internal::evaluator<Derived>(derived()).coeffRef(row,col); } EIGEN_DEVICE_FUNC @@ -371,7 +371,7 @@ class DenseCoeffsBase<Derived, WriteAccessors> : public DenseCoeffsBase<Derived, coeffRef(Index index) { eigen_internal_assert(index >= 0 && index < size()); - return typename internal::evaluator<Derived>::type(derived()).coeffRef(index); + return internal::evaluator<Derived>(derived()).coeffRef(index); } /** \returns a reference to the coefficient at given index. diff --git a/Eigen/src/Core/Inverse.h b/Eigen/src/Core/Inverse.h index 53d9b28f5..d70bffca9 100644 --- a/Eigen/src/Core/Inverse.h +++ b/Eigen/src/Core/Inverse.h @@ -100,13 +100,12 @@ namespace internal { */ template<typename ArgType> struct unary_evaluator<Inverse<ArgType> > - : public evaluator<typename Inverse<ArgType>::PlainObject>::type + : public evaluator<typename Inverse<ArgType>::PlainObject> { typedef Inverse<ArgType> InverseType; typedef typename InverseType::PlainObject PlainObject; - typedef typename evaluator<PlainObject>::type Base; + typedef evaluator<PlainObject> Base; - typedef evaluator<InverseType> type; typedef evaluator<InverseType> nestedType; enum { Flags = Base::Flags | EvalBeforeNestingBit }; diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h index f58fa5f60..b79236f15 100644 --- a/Eigen/src/Core/Product.h +++ b/Eigen/src/Core/Product.h @@ -165,7 +165,7 @@ public: operator const Scalar() const { - return typename internal::evaluator<ProductXpr>::type(derived()).coeff(0,0); + return internal::evaluator<ProductXpr>(derived()).coeff(0,0); } }; @@ -203,7 +203,7 @@ class ProductImpl<Lhs,Rhs,Option,Dense> EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS); eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) ); - return typename internal::evaluator<Derived>::type(derived()).coeff(row,col); + return internal::evaluator<Derived>(derived()).coeff(row,col); } EIGEN_DEVICE_FUNC Scalar coeff(Index i) const @@ -211,7 +211,7 @@ class ProductImpl<Lhs,Rhs,Option,Dense> EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS); eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) ); - return typename internal::evaluator<Derived>::type(derived()).coeff(i); + return internal::evaluator<Derived>(derived()).coeff(i); } diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h index f2c188631..2dcd02cbd 100755 --- a/Eigen/src/Core/ProductEvaluators.h +++ b/Eigen/src/Core/ProductEvaluators.h @@ -32,7 +32,6 @@ struct evaluator<Product<Lhs, Rhs, Options> > typedef Product<Lhs, Rhs, Options> XprType; typedef product_evaluator<XprType> Base; - typedef evaluator type; typedef evaluator nestedType; EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) : Base(xpr) {} @@ -47,7 +46,6 @@ struct evaluator<CwiseUnaryOp<internal::scalar_multiple_op<Scalar>, const Produ typedef CwiseUnaryOp<internal::scalar_multiple_op<Scalar>, const Product<Lhs, Rhs, DefaultProduct> > XprType; typedef evaluator<Product<CwiseUnaryOp<internal::scalar_multiple_op<Scalar>,const Lhs>, Rhs, DefaultProduct> > Base; - typedef evaluator type; typedef evaluator nestedType; EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) @@ -63,7 +61,6 @@ struct evaluator<Diagonal<const Product<Lhs, Rhs, DefaultProduct>, DiagIndex> > typedef Diagonal<const Product<Lhs, Rhs, DefaultProduct>, DiagIndex> XprType; typedef evaluator<Diagonal<const Product<Lhs, Rhs, LazyProduct>, DiagIndex> > Base; - typedef evaluator type; typedef evaluator nestedType; EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) @@ -102,11 +99,11 @@ struct evaluator_traits<Product<Lhs, Rhs, AliasFreeProduct> > template<typename Lhs, typename Rhs, int Options, int ProductTag, typename LhsShape, typename RhsShape> struct product_evaluator<Product<Lhs, Rhs, Options>, ProductTag, LhsShape, RhsShape, typename traits<Lhs>::Scalar, typename traits<Rhs>::Scalar, EnableIf<(Options==DefaultProduct || Options==AliasFreeProduct)> > - : public evaluator<typename Product<Lhs, Rhs, Options>::PlainObject>::type + : public evaluator<typename Product<Lhs, Rhs, Options>::PlainObject> { typedef Product<Lhs, Rhs, Options> XprType; typedef typename XprType::PlainObject PlainObject; - typedef typename evaluator<PlainObject>::type Base; + typedef evaluator<PlainObject> Base; enum { Flags = Base::Flags | EvalBeforeNestingBit }; @@ -221,7 +218,7 @@ struct generic_product_impl<Lhs,Rhs,DenseShape,DenseShape,InnerProduct> template<typename Dst, typename Lhs, typename Rhs, typename Func> EIGEN_DONT_INLINE void outer_product_selector_run(Dst& dst, const Lhs &lhs, const Rhs &rhs, const Func& func, const false_type&) { - typename evaluator<Rhs>::type rhsEval(rhs); + evaluator<Rhs> rhsEval(rhs); // FIXME make sure lhs is sequentially stored // FIXME not very good if rhs is real and lhs complex while alpha is real too // FIXME we should probably build an evaluator for dst @@ -234,7 +231,7 @@ EIGEN_DONT_INLINE void outer_product_selector_run(Dst& dst, const Lhs &lhs, cons template<typename Dst, typename Lhs, typename Rhs, typename Func> EIGEN_DONT_INLINE void outer_product_selector_run(Dst& dst, const Lhs &lhs, const Rhs &rhs, const Func& func, const true_type&) { - typename evaluator<Lhs>::type lhsEval(lhs); + evaluator<Lhs> lhsEval(lhs); // FIXME make sure rhs is sequentially stored // FIXME not very good if lhs is real and rhs complex while alpha is real too // FIXME we should probably build an evaluator for dst @@ -406,8 +403,8 @@ struct product_evaluator<Product<Lhs, Rhs, LazyProduct>, ProductTag, DenseShape, typedef typename internal::remove_all<LhsNested>::type LhsNestedCleaned; typedef typename internal::remove_all<RhsNested>::type RhsNestedCleaned; - typedef typename evaluator<LhsNestedCleaned>::type LhsEtorType; - typedef typename evaluator<RhsNestedCleaned>::type RhsEtorType; + typedef evaluator<LhsNestedCleaned> LhsEtorType; + typedef evaluator<RhsNestedCleaned> RhsEtorType; enum { RowsAtCompileTime = LhsNestedCleaned::RowsAtCompileTime, diff --git a/Eigen/src/Core/ReturnByValue.h b/Eigen/src/Core/ReturnByValue.h index af01a5567..5cd66ebed 100644 --- a/Eigen/src/Core/ReturnByValue.h +++ b/Eigen/src/Core/ReturnByValue.h @@ -94,13 +94,12 @@ namespace internal { template<typename Derived> struct evaluator<ReturnByValue<Derived> > - : public evaluator<typename internal::traits<Derived>::ReturnType>::type + : public evaluator<typename internal::traits<Derived>::ReturnType> { typedef ReturnByValue<Derived> XprType; typedef typename internal::traits<Derived>::ReturnType PlainObject; - typedef typename evaluator<PlainObject>::type Base; + typedef evaluator<PlainObject> Base; - typedef evaluator type; typedef evaluator nestedType; EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) diff --git a/Eigen/src/Core/Solve.h b/Eigen/src/Core/Solve.h index 47446b49e..911309018 100644 --- a/Eigen/src/Core/Solve.h +++ b/Eigen/src/Core/Solve.h @@ -113,13 +113,12 @@ namespace internal { // Evaluator of Solve -> eval into a temporary template<typename Decomposition, typename RhsType> struct evaluator<Solve<Decomposition,RhsType> > - : public evaluator<typename Solve<Decomposition,RhsType>::PlainObject>::type + : public evaluator<typename Solve<Decomposition,RhsType>::PlainObject> { typedef Solve<Decomposition,RhsType> SolveType; typedef typename SolveType::PlainObject PlainObject; - typedef typename evaluator<PlainObject>::type Base; + typedef evaluator<PlainObject> Base; - typedef evaluator type; typedef evaluator nestedType; EIGEN_DEVICE_FUNC explicit evaluator(const SolveType& solve) diff --git a/Eigen/src/Core/TriangularMatrix.h b/Eigen/src/Core/TriangularMatrix.h index 351630e57..63a1af8c1 100644 --- a/Eigen/src/Core/TriangularMatrix.h +++ b/Eigen/src/Core/TriangularMatrix.h @@ -664,7 +664,6 @@ struct unary_evaluator<TriangularView<MatrixType,Mode>, IndexBased> { typedef TriangularView<MatrixType,Mode> XprType; typedef evaluator<typename internal::remove_all<MatrixType>::type> Base; - typedef evaluator<XprType> type; unary_evaluator(const XprType &xpr) : Base(xpr.nestedExpression()) {} }; @@ -734,8 +733,8 @@ EIGEN_DEVICE_FUNC void call_triangular_assignment_loop(const DstXprType& dst, co { eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); - typedef typename evaluator<DstXprType>::type DstEvaluatorType; - typedef typename evaluator<SrcXprType>::type SrcEvaluatorType; + typedef evaluator<DstXprType> DstEvaluatorType; + typedef evaluator<SrcXprType> SrcEvaluatorType; DstEvaluatorType dstEvaluator(dst); SrcEvaluatorType srcEvaluator(src); |