let Diagonal have the DirectAccessBit, using an inner stride

This commit is contained in:
Benoit Jacob 2010-05-08 14:19:04 -04:00
parent bfdc1c4973
commit 65bd1652b1

View File

@ -58,8 +58,11 @@ struct ei_traits<Diagonal<MatrixType,Index> >
: Index == Dynamic ? EIGEN_ENUM_MIN(MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime)
: (EIGEN_ENUM_MIN(MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime) - AbsIndex),
MaxColsAtCompileTime = 1,
Flags = (unsigned int)_MatrixTypeNested::Flags & (HereditaryBits | LinearAccessBit) & ~RowMajorBit,
CoeffReadCost = _MatrixTypeNested::CoeffReadCost
Flags = (unsigned int)_MatrixTypeNested::Flags & (HereditaryBits | LinearAccessBit | DirectAccessBit) & ~RowMajorBit,
CoeffReadCost = _MatrixTypeNested::CoeffReadCost,
MatrixTypeOuterStride = ei_outer_stride_at_compile_time<MatrixType>::ret,
InnerStrideAtCompileTime = MatrixTypeOuterStride == Dynamic ? Dynamic : MatrixTypeOuterStride+1,
OuterStrideAtCompileTime = 0
};
};
@ -85,6 +88,16 @@ template<typename MatrixType, int Index> class Diagonal
inline int cols() const { return 1; }
inline int innerStride() const
{
return m_matrix.outerStride() + 1;
}
inline int outerStride() const
{
return 0;
}
inline Scalar& coeffRef(int row, int)
{
return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset());