33 lines
		
	
	
		
			948 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			948 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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;
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 |