diff options
author | Jitse Niesen <jitse@maths.leeds.ac.uk> | 2011-04-05 18:20:43 +0100 |
---|---|---|
committer | Jitse Niesen <jitse@maths.leeds.ac.uk> | 2011-04-05 18:20:43 +0100 |
commit | 11ea81858ae113ae11ee79dbb3a338172507a1bc (patch) | |
tree | a9887d2d8bcc9e92bf078f482b6a8f4dfba42dd6 /Eigen | |
parent | cca7b146a2018a74aa5f83edc0797fab89b1040e (diff) |
Implement evaluator for CwiseUnaryView
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Core/CoreEvaluators.h | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h index 3060ca982..9ed942135 100644 --- a/Eigen/src/Core/CoreEvaluators.h +++ b/Eigen/src/Core/CoreEvaluators.h @@ -259,7 +259,7 @@ struct evaluator_impl<CwiseUnaryOp<UnaryOp, ArgType> > } protected: - const UnaryOpType& m_unaryOp; + const UnaryOpType m_unaryOp; typename evaluator<ArgType>::type m_argImpl; }; @@ -304,6 +304,47 @@ protected: typename evaluator<Rhs>::type m_rhsImpl; }; +// -------------------- CwiseUnaryView -------------------- + +template<typename UnaryOp, typename ArgType> +struct evaluator_impl<CwiseUnaryView<UnaryOp, ArgType> > +{ + typedef CwiseUnaryView<UnaryOp, ArgType> CwiseUnaryViewType; + + evaluator_impl(const CwiseUnaryViewType& op) + : m_unaryOp(op.functor()), + m_argImpl(op.nestedExpression()) + { } + + typedef typename CwiseUnaryViewType::Index Index; + typedef typename CwiseUnaryViewType::Scalar Scalar; + typedef typename CwiseUnaryViewType::CoeffReturnType CoeffReturnType; + + CoeffReturnType coeff(Index row, Index col) const + { + return m_unaryOp(m_argImpl.coeff(row, col)); + } + + CoeffReturnType coeff(Index index) const + { + return m_unaryOp(m_argImpl.coeff(index)); + } + + Scalar& coeffRef(Index row, Index col) + { + return m_unaryOp(m_argImpl.coeffRef(row, col)); + } + + Scalar& coeffRef(Index index) + { + return m_unaryOp(m_argImpl.coeffRef(index)); + } + +protected: + const UnaryOp& m_unaryOp; + typename evaluator<ArgType>::type m_argImpl; +}; + // -------------------- Product -------------------- template<typename Lhs, typename Rhs> |