Merged in f5soh/librepilot/update_credits (pull request #529)
[librepilot.git] / ground / gcs / src / libs / eigen / doc / examples / make_circulant.cpp.evaluator
blob2ba79e78369f403ac122fa24f9d2898a74241e68
1 namespace Eigen {
2   namespace internal {
3     template<typename ArgType>
4     struct evaluator<Circulant<ArgType> >
5       : evaluator_base<Circulant<ArgType> >
6     {
7       typedef Circulant<ArgType> XprType;
8       typedef typename nested_eval<ArgType, XprType::ColsAtCompileTime>::type ArgTypeNested;
9       typedef typename remove_all<ArgTypeNested>::type ArgTypeNestedCleaned;
10       typedef typename XprType::CoeffReturnType CoeffReturnType;
12       enum { 
13         CoeffReadCost = evaluator<ArgTypeNestedCleaned>::CoeffReadCost,
14         Flags = Eigen::ColMajor 
15       };
16       
17       evaluator(const XprType& xpr)
18         : m_argImpl(xpr.m_arg), m_rows(xpr.rows())
19       { }
21       CoeffReturnType coeff(Index row, Index col) const
22       {
23         Index index = row - col;
24         if (index < 0) index += m_rows;
25         return m_argImpl.coeff(index);
26       }
28       evaluator<ArgTypeNestedCleaned> m_argImpl;
29       const Index m_rows;
30     };
31   }