1234567891011121314151617181920212223242526272829303132 |
- 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;
- };
- }
- }
|