25 lines
		
	
	
		
			850 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			850 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 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
 | 
