diff options
author | Gael Guennebaud <g.gael@free.fr> | 2020-05-30 23:14:29 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2020-05-30 23:15:12 +0200 |
commit | ab615e4114aafebcf44268aae93b97858f549a11 (patch) | |
tree | d032bd07671092a827e6ec101bee5042d21ec4d7 /Eigen/src/SparseCore | |
parent | 95177362edc9c814a102c8a2236695c632892232 (diff) |
Save one extra temporary when assigning a sparse product to a row-major sparse matrix
Diffstat (limited to 'Eigen/src/SparseCore')
-rw-r--r-- | Eigen/src/SparseCore/SparseMatrix.h | 3 | ||||
-rw-r--r-- | Eigen/src/SparseCore/SparseProduct.h | 12 |
2 files changed, 15 insertions, 0 deletions
diff --git a/Eigen/src/SparseCore/SparseMatrix.h b/Eigen/src/SparseCore/SparseMatrix.h index e0910a2cb..2218b220b 100644 --- a/Eigen/src/SparseCore/SparseMatrix.h +++ b/Eigen/src/SparseCore/SparseMatrix.h @@ -782,6 +782,9 @@ class SparseMatrix template<typename OtherDerived> inline SparseMatrix& operator=(const EigenBase<OtherDerived>& other) { return Base::operator=(other.derived()); } + + template<typename Lhs, typename Rhs> + inline SparseMatrix& operator=(const Product<Lhs,Rhs,AliasFreeProduct>& other); #endif // EIGEN_PARSED_BY_DOXYGEN template<typename OtherDerived> diff --git a/Eigen/src/SparseCore/SparseProduct.h b/Eigen/src/SparseCore/SparseProduct.h index c495a7398..af8a7744d 100644 --- a/Eigen/src/SparseCore/SparseProduct.h +++ b/Eigen/src/SparseCore/SparseProduct.h @@ -164,6 +164,18 @@ protected: } // end namespace internal +// sparse matrix = sparse-product (can be sparse*sparse, sparse*perm, etc.) +template<typename Scalar, int _Options, typename _StorageIndex> +template<typename Lhs, typename Rhs> +SparseMatrix<Scalar,_Options,_StorageIndex>& SparseMatrix<Scalar,_Options,_StorageIndex>::operator=(const Product<Lhs,Rhs,AliasFreeProduct>& src) +{ + // std::cout << "in Assignment : " << DstOptions << "\n"; + SparseMatrix dst(src.rows(),src.cols()); + internal::generic_product_impl<Lhs, Rhs>::evalTo(dst,src.lhs(),src.rhs()); + this->swap(dst); + return *this; +} + } // end namespace Eigen #endif // EIGEN_SPARSEPRODUCT_H |