64 typedef typename SparseXprType::Scalar Scalar;
71 : SparseXprInnerIterator(xprEval.m_sparseXprImpl, outer),
72 m_coeff(xprEval.m_diagCoeffImpl.coeff(outer))
75 EIGEN_STRONG_INLINE Scalar value()
const {
return m_coeff * SparseXprInnerIterator::value(); }
77 typename DiagonalCoeffType::Scalar m_coeff;
81 : m_sparseXprImpl(sparseXpr), m_diagCoeffImpl(diagCoeff)
84 Index nonZerosEstimate()
const {
return m_sparseXprImpl.nonZerosEstimate(); }
87 evaluator<SparseXprType> m_sparseXprImpl;
88 evaluator<DiagonalCoeffType> m_diagCoeffImpl;
95 typedef typename SparseXprType::Scalar Scalar;
96 typedef typename SparseXprType::StorageIndex StorageIndex;
98 typedef typename nested_eval<DiagCoeffType,SparseXprType::IsRowMajor ? SparseXprType::RowsAtCompileTime
99 : SparseXprType::ColsAtCompileTime>::type DiagCoeffNested;
106 : m_sparseIter(xprEval.m_sparseXprEval, outer), m_diagCoeffNested(xprEval.m_diagCoeffNested)
109 inline Scalar value()
const {
return m_sparseIter.value() * m_diagCoeffNested.coeff(index()); }
110 inline StorageIndex index()
const {
return m_sparseIter.index(); }
111 inline Index outer()
const {
return m_sparseIter.outer(); }
112 inline Index col()
const {
return SparseXprType::IsRowMajor ? m_sparseIter.index() : m_sparseIter.outer(); }
113 inline Index row()
const {
return SparseXprType::IsRowMajor ? m_sparseIter.outer() : m_sparseIter.index(); }
115 EIGEN_STRONG_INLINE
InnerIterator& operator++() { ++m_sparseIter;
return *
this; }
116 inline operator bool()
const {
return m_sparseIter; }
119 SparseXprIter m_sparseIter;
120 DiagCoeffNested m_diagCoeffNested;
124 : m_sparseXprEval(sparseXpr), m_diagCoeffNested(diagCoeff)
127 Index nonZerosEstimate()
const {
return m_sparseXprEval.nonZerosEstimate(); }
130 evaluator<SparseXprType> m_sparseXprEval;
131 DiagCoeffNested m_diagCoeffNested;