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;
|
||
|
};
|
||
|
}
|
||
|
}
|