10 #ifndef EIGEN_SPARSE_DIAGONAL_PRODUCT_H 11 #define EIGEN_SPARSE_DIAGONAL_PRODUCT_H 34 template<
typename SparseXprType,
typename DiagonalCoeffType,
int SDP_Tag>
37 template<
typename Lhs,
typename Rhs,
int ProductTag>
45 explicit product_evaluator(
const XprType& xpr) : Base(xpr.rhs(), xpr.lhs().diagonal()) {}
48 template<
typename Lhs,
typename Rhs,
int ProductTag>
56 explicit product_evaluator(
const XprType& xpr) : Base(xpr.lhs(), xpr.rhs().diagonal().transpose()) {}
59 template<
typename SparseXprType,
typename DiagonalCoeffType>
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)
90 template<
typename SparseXprType,
typename DiagCoeffType>
93 typedef typename SparseXprType::Scalar Scalar;
94 typedef typename SparseXprType::StorageIndex StorageIndex;
96 typedef typename nested_eval<DiagCoeffType,SparseXprType::IsRowMajor ? SparseXprType::RowsAtCompileTime
97 : SparseXprType::ColsAtCompileTime>::type DiagCoeffNested;
104 : m_sparseIter(xprEval.m_sparseXprEval, outer), m_diagCoeffNested(xprEval.m_diagCoeffNested)
107 inline Scalar value()
const {
return m_sparseIter.value() * m_diagCoeffNested.coeff(index()); }
108 inline StorageIndex index()
const {
return m_sparseIter.index(); }
109 inline Index outer()
const {
return m_sparseIter.outer(); }
110 inline Index col()
const {
return SparseXprType::IsRowMajor ? m_sparseIter.index() : m_sparseIter.outer(); }
111 inline Index row()
const {
return SparseXprType::IsRowMajor ? m_sparseIter.outer() : m_sparseIter.index(); }
113 EIGEN_STRONG_INLINE
InnerIterator& operator++() { ++m_sparseIter;
return *
this; }
114 inline operator bool()
const {
return m_sparseIter; }
117 SparseXprIter m_sparseIter;
118 DiagCoeffNested m_diagCoeffNested;
122 : m_sparseXprEval(sparseXpr), m_diagCoeffNested(diagCoeff)
127 DiagCoeffNested m_diagCoeffNested;
134 #endif // EIGEN_SPARSE_DIAGONAL_PRODUCT_H const int HugeCost
This value means that the cost to evaluate an expression coefficient is either very expensive or cann...
Definition: Constants.h:39
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:71
Definition: ForwardDeclarations.h:162
Definition: CoreEvaluators.h:90
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:85
Definition: Constants.h:521
Definition: SparseDiagonalProduct.h:35
const unsigned int RowMajorBit
for a matrix, this means that the storage order is row-major.
Definition: Constants.h:61
Definition: XprHelper.h:437
Definition: Constants.h:515
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
Definition: BandTriangularSolver.h:13
An InnerIterator allows to loop over the element of any matrix expression.
Definition: CoreIterators.h:33