aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/SparseCore/SparseAssign.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-10-29 13:16:15 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-10-29 13:16:15 +0100
commit568d488a2778b6e539a417b1ab2b62d1a096784e (patch)
treeb12d798da69d2523b568c1070df2f44c3d6bede3 /Eigen/src/SparseCore/SparseAssign.h
parent7a5f83ca60c667898e6d8096dac5680793ddfce9 (diff)
Fusion the two similar specialization of Sparse2Dense Assignment.
This change also fixes a compilation issue with MSVC<=2013.
Diffstat (limited to 'Eigen/src/SparseCore/SparseAssign.h')
-rw-r--r--Eigen/src/SparseCore/SparseAssign.h21
1 files changed, 4 insertions, 17 deletions
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<DstXprType, SrcXprType, Functor, Sparse2Sparse, Scalar>
template< typename DstXprType, typename SrcXprType, typename Functor>
struct Assignment<DstXprType, SrcXprType, Functor, Sparse2Dense>
{
+ 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<SrcXprType> srcEval(src);
- internal::evaluator<DstXprType> dstEval(dst);
- const Index outerEvaluationSize = (internal::evaluator<SrcXprType>::Flags&RowMajorBit) ? src.rows() : src.cols();
- for (Index j=0; j<outerEvaluationSize; ++j)
- for (typename internal::evaluator<SrcXprType>::InnerIterator i(srcEval,j); i; ++i)
- func.assignCoeff(dstEval.coeffRef(i.row(),i.col()), i.value());
- }
-};
-template< typename DstXprType, typename SrcXprType>
-struct Assignment<DstXprType, SrcXprType, internal::assign_op<typename DstXprType::Scalar>, Sparse2Dense>
-{
- static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar> &)
- {
- eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols());
+ if(internal::is_same<Functor,internal::assign_op<Scalar> >::value)
+ dst.setZero();
- dst.setZero();
internal::evaluator<SrcXprType> srcEval(src);
internal::evaluator<DstXprType> dstEval(dst);
const Index outerEvaluationSize = (internal::evaluator<SrcXprType>::Flags&RowMajorBit) ? src.rows() : src.cols();
for (Index j=0; j<outerEvaluationSize; ++j)
for (typename internal::evaluator<SrcXprType>::InnerIterator i(srcEval,j); i; ++i)
- dstEval.coeffRef(i.row(),i.col()) = i.value();
+ func.assignCoeff(dstEval.coeffRef(i.row(),i.col()), i.value());
}
};