| 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; | |
| 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); | |
| } | |
| evaluator<ArgTypeNestedCleaned> m_argImpl; | |
| const Index m_rows; | |
| }; | |
| } | |
| } |