From 2f0307cdb5c186578fdc09f425a841547eec1bdd Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 3 Oct 2012 09:06:19 +0200 Subject: [PATCH] fix dense=sparse*diagonal (there was an issue in the values returned by the .outer() function of the related iterators) (transplanted from fec6df1f7dc4da6de865cc024c45aee5dbb64d88 ) --- Eigen/src/SparseCore/SparseDiagonalProduct.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Eigen/src/SparseCore/SparseDiagonalProduct.h b/Eigen/src/SparseCore/SparseDiagonalProduct.h index 095bf6863..ccba02124 100644 --- a/Eigen/src/SparseCore/SparseDiagonalProduct.h +++ b/Eigen/src/SparseCore/SparseDiagonalProduct.h @@ -126,11 +126,15 @@ class sparse_diagonal_product_inner_iterator_selector SparseInnerVectorSet, typename Lhs::DiagonalVectorType>::InnerIterator Base; typedef typename Lhs::Index Index; + Index m_outer; public: inline sparse_diagonal_product_inner_iterator_selector( const SparseDiagonalProductType& expr, Index outer) - : Base(expr.rhs().innerVector(outer) .cwiseProduct(expr.lhs().diagonal()), 0) + : Base(expr.rhs().innerVector(outer) .cwiseProduct(expr.lhs().diagonal()), 0), m_outer(outer) {} + + inline Index outer() const { return m_outer; } + inline Index col() const { return m_outer; } }; template @@ -160,11 +164,15 @@ class sparse_diagonal_product_inner_iterator_selector SparseInnerVectorSet, Transpose >::InnerIterator Base; typedef typename Lhs::Index Index; + Index m_outer; public: inline sparse_diagonal_product_inner_iterator_selector( const SparseDiagonalProductType& expr, Index outer) - : Base(expr.lhs().innerVector(outer) .cwiseProduct(expr.rhs().diagonal().transpose()), 0) + : Base(expr.lhs().innerVector(outer) .cwiseProduct(expr.rhs().diagonal().transpose()), 0), m_outer(outer) {} + + inline Index outer() const { return m_outer; } + inline Index row() const { return m_outer; } }; } // end namespace internal