diff options
author | Gael Guennebaud <g.gael@free.fr> | 2016-06-14 11:29:54 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2016-06-14 11:29:54 +0200 |
commit | f57fd78e308c80d25b1f8c92ae8db2bdc5045a29 (patch) | |
tree | 2db5f87794cfc466d42b17e7c9b55c470f07b455 /Eigen/src/SparseCore/SparseCwiseBinaryOp.h | |
parent | f5b1c7394537cc74978617383628c3b6b9399e57 (diff) |
Generalize coeff-wise sparse products to support different scalar types
Diffstat (limited to 'Eigen/src/SparseCore/SparseCwiseBinaryOp.h')
-rw-r--r-- | Eigen/src/SparseCore/SparseCwiseBinaryOp.h | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/Eigen/src/SparseCore/SparseCwiseBinaryOp.h b/Eigen/src/SparseCore/SparseCwiseBinaryOp.h index dd21eb8c5..aad7b7d79 100644 --- a/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +++ b/Eigen/src/SparseCore/SparseCwiseBinaryOp.h @@ -28,6 +28,9 @@ namespace Eigen { // generic sparse // 4 - dense op dense product dense // generic dense +// +// TODO to ease compiler job, we could specialize product/quotient with a scalar +// and fallback to cwise-unary evaluator using bind1st_op and bind2nd_op. template<typename BinaryOp, typename Lhs, typename Rhs> class CwiseBinaryOpImpl<BinaryOp, Lhs, Rhs, Sparse> @@ -323,12 +326,12 @@ protected: }; // "sparse .* sparse" -template<typename T, typename Lhs, typename Rhs> -struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T>, Lhs, Rhs>, IteratorBased, IteratorBased> - : evaluator_base<CwiseBinaryOp<scalar_product_op<T>, Lhs, Rhs> > +template<typename T1, typename T2, typename Lhs, typename Rhs> +struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IteratorBased, IteratorBased> + : evaluator_base<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> > { protected: - typedef scalar_product_op<T> BinaryOp; + typedef scalar_product_op<T1,T2> BinaryOp; typedef typename evaluator<Lhs>::InnerIterator LhsIterator; typedef typename evaluator<Rhs>::InnerIterator RhsIterator; typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType; @@ -407,12 +410,12 @@ protected: }; // "dense .* sparse" -template<typename T, typename Lhs, typename Rhs> -struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T>, Lhs, Rhs>, IndexBased, IteratorBased> - : evaluator_base<CwiseBinaryOp<scalar_product_op<T>, Lhs, Rhs> > +template<typename T1, typename T2, typename Lhs, typename Rhs> +struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IndexBased, IteratorBased> + : evaluator_base<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> > { protected: - typedef scalar_product_op<T> BinaryOp; + typedef scalar_product_op<T1,T2> BinaryOp; typedef evaluator<Lhs> LhsEvaluator; typedef typename evaluator<Rhs>::InnerIterator RhsIterator; typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType; @@ -480,12 +483,12 @@ protected: }; // "sparse .* dense" -template<typename T, typename Lhs, typename Rhs> -struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T>, Lhs, Rhs>, IteratorBased, IndexBased> - : evaluator_base<CwiseBinaryOp<scalar_product_op<T>, Lhs, Rhs> > +template<typename T1, typename T2, typename Lhs, typename Rhs> +struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IteratorBased, IndexBased> + : evaluator_base<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> > { protected: - typedef scalar_product_op<T> BinaryOp; + typedef scalar_product_op<T1,T2> BinaryOp; typedef typename evaluator<Lhs>::InnerIterator LhsIterator; typedef evaluator<Rhs> RhsEvaluator; typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType; |