From 568d488a2778b6e539a417b1ab2b62d1a096784e Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Thu, 29 Oct 2015 13:16:15 +0100 Subject: Fusion the two similar specialization of Sparse2Dense Assignment. This change also fixes a compilation issue with MSVC<=2013. --- Eigen/src/SparseCore/SparseAssign.h | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) (limited to 'Eigen/src/SparseCore') diff --git a/Eigen/src/SparseCore/SparseAssign.h b/Eigen/src/SparseCore/SparseAssign.h index 4b663a59e..cb154d1c2 100644 --- a/Eigen/src/SparseCore/SparseAssign.h +++ b/Eigen/src/SparseCore/SparseAssign.h @@ -136,33 +136,20 @@ struct Assignment template< typename DstXprType, typename SrcXprType, typename Functor> struct Assignment { + typedef typename DstXprType::Scalar Scalar; static void run(DstXprType &dst, const SrcXprType &src, const Functor &func) { eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); - - internal::evaluator srcEval(src); - internal::evaluator dstEval(dst); - const Index outerEvaluationSize = (internal::evaluator::Flags&RowMajorBit) ? src.rows() : src.cols(); - for (Index j=0; j::InnerIterator i(srcEval,j); i; ++i) - func.assignCoeff(dstEval.coeffRef(i.row(),i.col()), i.value()); - } -}; -template< typename DstXprType, typename SrcXprType> -struct Assignment, Sparse2Dense> -{ - static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op &) - { - eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); + if(internal::is_same >::value) + dst.setZero(); - dst.setZero(); internal::evaluator srcEval(src); internal::evaluator dstEval(dst); const Index outerEvaluationSize = (internal::evaluator::Flags&RowMajorBit) ? src.rows() : src.cols(); for (Index j=0; j::InnerIterator i(srcEval,j); i; ++i) - dstEval.coeffRef(i.row(),i.col()) = i.value(); + func.assignCoeff(dstEval.coeffRef(i.row(),i.col()), i.value()); } }; -- cgit v1.2.3