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>
    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))
    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;
    96   typedef typename nested_eval<DiagCoeffType,SparseXprType::IsRowMajor ? SparseXprType::RowsAtCompileTime
   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(); }
   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(); }
   114     inline operator bool()
 const  { 
return m_sparseIter; }
   122     : m_sparseXprEval(sparseXpr), m_diagCoeffNested(diagCoeff)
   134 #endif // EIGEN_SPARSE_DIAGONAL_PRODUCT_H 
InnerIterator(const sparse_diagonal_product_evaluator &xprEval, Index outer)
#define EIGEN_STRONG_INLINE
DiagCoeffNested m_diagCoeffNested
evaluator< SparseXprType >::InnerIterator SparseXprInnerIterator
Expression of the product of two arbitrary matrices or vectors. 
nested_eval< DiagCoeffType, SparseXprType::IsRowMajor ? SparseXprType::RowsAtCompileTime :SparseXprType::ColsAtCompileTime >::type DiagCoeffNested
InnerIterator(const sparse_diagonal_product_evaluator &xprEval, Index outer)
evaluator< SparseXprType > m_sparseXprImpl
DiagCoeffNested m_diagCoeffNested
EIGEN_STRONG_INLINE InnerIterator & operator++()
sparse_diagonal_product_evaluator(const SparseXprType &sparseXpr, const DiagonalCoeffType &diagCoeff)
StorageIndex index() const
const unsigned int RowMajorBit
SparseXprType::Scalar Scalar
EIGEN_STRONG_INLINE Scalar value() const
evaluator< DiagonalCoeffType > m_diagCoeffImpl
Product< Lhs, Rhs, DefaultProduct > XprType
evaluator< SparseXprType >::InnerIterator SparseXprIter
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API. 
SparseXprType::Scalar Scalar
evaluator< SparseXprType > m_sparseXprEval
Product< Lhs, Rhs, DefaultProduct > XprType
SparseXprType::StorageIndex StorageIndex
sparse_diagonal_product_evaluator(const SparseXprType &sparseXpr, const DiagCoeffType &diagCoeff)
product_evaluator(const XprType &xpr)
product_evaluator(const XprType &xpr)
sparse_diagonal_product_evaluator< Rhs, typename Lhs::DiagonalVectorType, Rhs::Flags &RowMajorBit?SDP_AsScalarProduct:SDP_AsCwiseProduct > Base
DiagonalCoeffType::Scalar m_coeff
SparseXprIter m_sparseIter
sparse_diagonal_product_evaluator< Lhs, Transpose< const typename Rhs::DiagonalVectorType >, Lhs::Flags &RowMajorBit?SDP_AsCwiseProduct:SDP_AsScalarProduct > Base
An InnerIterator allows to loop over the element of any matrix expression.