From ce2035af868d57b85b4078c15843d5c1f51047dc Mon Sep 17 00:00:00 2001 From: Jitse Niesen Date: Sat, 27 Sep 2014 23:25:58 +0100 Subject: New doc page on implementing a new expression class. --- doc/examples/make_circulant.cpp.evaluator | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 doc/examples/make_circulant.cpp.evaluator (limited to 'doc/examples/make_circulant.cpp.evaluator') diff --git a/doc/examples/make_circulant.cpp.evaluator b/doc/examples/make_circulant.cpp.evaluator new file mode 100644 index 000000000..98713cdc0 --- /dev/null +++ b/doc/examples/make_circulant.cpp.evaluator @@ -0,0 +1,33 @@ +namespace Eigen { + namespace internal { + template + struct evaluator > + : evaluator_base > + { + typedef Circulant XprType; + typedef typename nested_eval::type ArgTypeNested; + typedef typename remove_all::type ArgTypeNestedCleaned; + typedef typename XprType::CoeffReturnType CoeffReturnType; + typedef typename XprType::Index Index; + + enum { + CoeffReadCost = evaluator::CoeffReadCost, + Flags = Eigen::ColMajor + }; + + evaluator(const XprType& xpr) + : m_argImpl(xpr.m_arg), m_rows(xpr.rows()) + { } + + CoeffReturnType coeff(Index row, Index col) const + { + Index index = row - col; + if (index < 0) index += m_rows; + return m_argImpl.coeff(index); + } + + typename evaluator::nestedType m_argImpl; + const Index m_rows; + }; + } +} -- cgit v1.2.3