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