diff options
author | 2014-02-19 11:33:29 +0100 | |
---|---|---|
committer | 2014-02-19 11:33:29 +0100 | |
commit | ccc41128fb936563651a3c5b25bfc80f303710bf (patch) | |
tree | 95f9c13ef7bfa277c30364bb898b64e27f0f510b /Eigen/src/Core/TriangularMatrix.h | |
parent | b3a07eecc5ad19f418f15d70d1517f8b7e07dc1b (diff) |
Add a Solve expression for uniform treatment of solve() methods.
Diffstat (limited to 'Eigen/src/Core/TriangularMatrix.h')
-rw-r--r-- | Eigen/src/Core/TriangularMatrix.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Eigen/src/Core/TriangularMatrix.h b/Eigen/src/Core/TriangularMatrix.h index ffa2faeaa..76ba76d5f 100644 --- a/Eigen/src/Core/TriangularMatrix.h +++ b/Eigen/src/Core/TriangularMatrix.h @@ -437,11 +437,19 @@ template<typename _MatrixType, unsigned int _Mode> class TriangularView EIGEN_DEVICE_FUNC void solveInPlace(const MatrixBase<OtherDerived>& other) const; +#ifdef EIGEN_TEST_EVALUATORS + template<typename Other> + EIGEN_DEVICE_FUNC + inline const Solve<TriangularView, Other> + solve(const MatrixBase<Other>& other) const + { return Solve<TriangularView, Other>(*this, other.derived()); } +#else // EIGEN_TEST_EVALUATORS template<typename Other> EIGEN_DEVICE_FUNC inline const internal::triangular_solve_retval<OnTheLeft,TriangularView, Other> solve(const MatrixBase<Other>& other) const { return solve<OnTheLeft>(other); } +#endif // EIGEN_TEST_EVALUATORS template<typename OtherDerived> EIGEN_DEVICE_FUNC @@ -547,6 +555,15 @@ template<typename _MatrixType, unsigned int _Mode> class TriangularView #endif // EIGEN_TEST_EVALUATORS #ifdef EIGEN_TEST_EVALUATORS + + template<typename RhsType, typename DstType> + EIGEN_DEVICE_FUNC + EIGEN_STRONG_INLINE void _solve_impl(const RhsType &rhs, DstType &dst) const { + if(!(internal::is_same<RhsType,DstType>::value && internal::extract_data(dst) == internal::extract_data(rhs))) + dst = rhs; + this->template solveInPlace(dst); + } + template<typename ProductType> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TriangularView& _assignProduct(const ProductType& prod, const Scalar& alpha); |