diff options
author | Gael Guennebaud <g.gael@free.fr> | 2010-07-13 16:03:49 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2010-07-13 16:03:49 +0200 |
commit | 1dc9aaaf364e6a6eba679e09e965088fb6905cde (patch) | |
tree | 2d013a723076719b25505b5bf1193e598e4ddb81 /Eigen/src/Core/SolveTriangular.h | |
parent | 36d9b51a44240ace201d38956b89293cb5cecd8d (diff) |
add support for mixing type in trsv
Diffstat (limited to 'Eigen/src/Core/SolveTriangular.h')
-rw-r--r-- | Eigen/src/Core/SolveTriangular.h | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h index c25317989..960da31f3 100644 --- a/Eigen/src/Core/SolveTriangular.h +++ b/Eigen/src/Core/SolveTriangular.h @@ -53,7 +53,8 @@ struct ei_triangular_solver_selector; template<typename Lhs, typename Rhs, int Mode> struct ei_triangular_solver_selector<Lhs,Rhs,OnTheLeft,Mode,NoUnrolling,RowMajor,1> { - typedef typename Rhs::Scalar Scalar; + typedef typename Lhs::Scalar LhsScalar; + typedef typename Rhs::Scalar RhsScalar; typedef ei_blas_traits<Lhs> LhsProductTraits; typedef typename LhsProductTraits::ExtractType ActualLhsType; typedef typename Lhs::Index Index; @@ -81,12 +82,12 @@ struct ei_triangular_solver_selector<Lhs,Rhs,OnTheLeft,Mode,NoUnrolling,RowMajor Index startRow = IsLower ? pi : pi-actualPanelWidth; Index startCol = IsLower ? 0 : pi; - ei_general_matrix_vector_product<Index,Scalar,RowMajor,LhsProductTraits::NeedToConjugate,Scalar,false>::run( + ei_general_matrix_vector_product<Index,LhsScalar,RowMajor,LhsProductTraits::NeedToConjugate,RhsScalar,false>::run( actualPanelWidth, r, &(actualLhs.const_cast_derived().coeffRef(startRow,startCol)), actualLhs.outerStride(), &(other.coeffRef(startCol)), other.innerStride(), &other.coeffRef(startRow), other.innerStride(), - Scalar(-1)); + RhsScalar(-1)); } for(Index k=0; k<actualPanelWidth; ++k) @@ -107,13 +108,12 @@ struct ei_triangular_solver_selector<Lhs,Rhs,OnTheLeft,Mode,NoUnrolling,RowMajor template<typename Lhs, typename Rhs, int Mode> struct ei_triangular_solver_selector<Lhs,Rhs,OnTheLeft,Mode,NoUnrolling,ColMajor,1> { - typedef typename Rhs::Scalar Scalar; - typedef typename ei_packet_traits<Scalar>::type Packet; + typedef typename Lhs::Scalar LhsScalar; + typedef typename Rhs::Scalar RhsScalar; typedef ei_blas_traits<Lhs> LhsProductTraits; typedef typename LhsProductTraits::ExtractType ActualLhsType; typedef typename Lhs::Index Index; enum { - PacketSize = ei_packet_traits<Scalar>::size, IsLower = ((Mode&Lower)==Lower) }; @@ -148,11 +148,11 @@ struct ei_triangular_solver_selector<Lhs,Rhs,OnTheLeft,Mode,NoUnrolling,ColMajor // let's directly call the low level product function because: // 1 - it is faster to compile // 2 - it is slighlty faster at runtime - ei_general_matrix_vector_product<Index,Scalar,ColMajor,LhsProductTraits::NeedToConjugate,Scalar,false>::run( + ei_general_matrix_vector_product<Index,LhsScalar,ColMajor,LhsProductTraits::NeedToConjugate,RhsScalar,false>::run( r, actualPanelWidth, &(actualLhs.const_cast_derived().coeffRef(endBlock,startBlock)), actualLhs.outerStride(), &other.coeff(startBlock), other.innerStride(), - &(other.coeffRef(endBlock, 0)), other.innerStride(), Scalar(-1)); + &(other.coeffRef(endBlock, 0)), other.innerStride(), RhsScalar(-1)); } } } |