You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					33 lines
				
				948 B
			
		
		
			
		
	
	
					33 lines
				
				948 B
			| 
								 
											2 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |