New doc page on implementing a new expression class.

This commit is contained in:
Jitse Niesen
2014-09-27 23:25:58 +01:00
parent 6d0f0b8cec
commit ce2035af86
9 changed files with 238 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
namespace Eigen {
namespace internal {
template<typename ArgType>
struct evaluator<Circulant<ArgType> >
: evaluator_base<Circulant<ArgType> >
{
typedef Circulant<ArgType> XprType;
typedef typename nested_eval<ArgType, XprType::ColsAtCompileTime>::type ArgTypeNested;
typedef typename remove_all<ArgTypeNested>::type ArgTypeNestedCleaned;
typedef typename XprType::CoeffReturnType CoeffReturnType;
typedef typename XprType::Index Index;
enum {
CoeffReadCost = evaluator<ArgTypeNestedCleaned>::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<ArgTypeNestedCleaned>::nestedType m_argImpl;
const Index m_rows;
};
}
}