| 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 remove_all_t<ArgTypeNested> 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; | 
 | }; | 
 | }  // namespace internal | 
 | }  // namespace Eigen |