diff options
author | Gael Guennebaud <g.gael@free.fr> | 2014-06-25 17:23:52 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2014-06-25 17:23:52 +0200 |
commit | b868bfb84a4a86231bb338e9bcf08afd882d32dc (patch) | |
tree | 29f019cbbe4f5821fc41c6f2358961fc99c7c7e0 /Eigen/src/SparseCore/SparseAssign.h | |
parent | 3b19b466a7609fd381db2c53569d4d1d1621dbfc (diff) |
Make operator=(EigenBase<>) uses the new assignment mechanism and introduce a generic EigenBase to EigenBase assignment kind based on the previous evalTo mechanism.
Diffstat (limited to 'Eigen/src/SparseCore/SparseAssign.h')
-rw-r--r-- | Eigen/src/SparseCore/SparseAssign.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Eigen/src/SparseCore/SparseAssign.h b/Eigen/src/SparseCore/SparseAssign.h index d4434e0ae..86a0b08c5 100644 --- a/Eigen/src/SparseCore/SparseAssign.h +++ b/Eigen/src/SparseCore/SparseAssign.h @@ -167,8 +167,10 @@ struct storage_kind_to_shape<Sparse> { }; struct Sparse2Sparse {}; +struct Sparse2Dense {}; template<> struct AssignmentKind<SparseShape,SparseShape> { typedef Sparse2Sparse Kind; }; +template<> struct AssignmentKind<DenseShape,SparseShape> { typedef Sparse2Dense Kind; }; template<typename DstXprType, typename SrcXprType> @@ -242,6 +244,24 @@ struct Assignment<DstXprType, SrcXprType, Functor, Sparse2Sparse, Scalar> } }; +// Sparse to Dense assignment +template< typename DstXprType, typename SrcXprType, typename Functor, typename Scalar> +struct Assignment<DstXprType, SrcXprType, Functor, Sparse2Dense, Scalar> +{ + static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar> &/*func*/) + { + eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); + typedef typename SrcXprType::Index Index; + + dst.setZero(); + typename internal::evaluator<SrcXprType>::type srcEval(src); + typename internal::evaluator<DstXprType>::type dstEval(dst); + for (Index j=0; j<src.outerSize(); ++j) + for (typename internal::evaluator<SrcXprType>::InnerIterator i(srcEval,j); i; ++i) + dstEval.coeffRef(i.row(),i.col()) = i.value(); + } +}; + } // end namespace internal #endif // EIGEN_TEST_EVALUATORS |