aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2011-04-05 18:20:43 +0100
committerGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2011-04-05 18:20:43 +0100
commit11ea81858ae113ae11ee79dbb3a338172507a1bc (patch)
treea9887d2d8bcc9e92bf078f482b6a8f4dfba42dd6 /Eigen
parentcca7b146a2018a74aa5f83edc0797fab89b1040e (diff)
Implement evaluator for CwiseUnaryView
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/Core/CoreEvaluators.h43
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>