10 #ifndef EIGEN_SPARSE_SOLVE_H
11 #define EIGEN_SPARSE_SOLVE_H
17 template<
typename _DecompositionType,
typename Rhs>
struct sparse_solve_retval_base;
18 template<
typename _DecompositionType,
typename Rhs>
struct sparse_solve_retval;
20 template<
typename DecompositionType,
typename Rhs>
21 struct traits<sparse_solve_retval_base<DecompositionType, Rhs> >
23 typedef typename DecompositionType::MatrixType MatrixType;
24 typedef SparseMatrix<typename Rhs::Scalar, Rhs::Options, typename Rhs::Index> ReturnType;
27 template<
typename _DecompositionType,
typename Rhs>
struct sparse_solve_retval_base
28 :
public ReturnByValue<sparse_solve_retval_base<_DecompositionType, Rhs> >
30 typedef typename remove_all<typename Rhs::Nested>::type RhsNestedCleaned;
31 typedef _DecompositionType DecompositionType;
32 typedef ReturnByValue<sparse_solve_retval_base> Base;
33 typedef typename Base::Index Index;
35 sparse_solve_retval_base(
const DecompositionType& dec,
const Rhs& rhs)
36 : m_dec(dec), m_rhs(rhs)
39 inline Index rows()
const {
return m_dec.cols(); }
40 inline Index cols()
const {
return m_rhs.cols(); }
41 inline const DecompositionType& dec()
const {
return m_dec; }
42 inline const RhsNestedCleaned& rhs()
const {
return m_rhs; }
44 template<
typename Dest>
inline void evalTo(Dest& dst)
const
46 static_cast<const sparse_solve_retval<DecompositionType,Rhs>*
>(
this)->evalTo(dst);
50 const DecompositionType& m_dec;
51 typename Rhs::Nested m_rhs;
54 #define EIGEN_MAKE_SPARSE_SOLVE_HELPERS(DecompositionType,Rhs) \
55 typedef typename DecompositionType::MatrixType MatrixType; \
56 typedef typename MatrixType::Scalar Scalar; \
57 typedef typename MatrixType::RealScalar RealScalar; \
58 typedef typename MatrixType::Index Index; \
59 typedef Eigen::internal::sparse_solve_retval_base<DecompositionType,Rhs> Base; \
64 sparse_solve_retval(const DecompositionType& dec, const Rhs& rhs) \
69 template<
typename DecompositionType,
typename Rhs,
typename Guess>
struct solve_retval_with_guess;
71 template<
typename DecompositionType,
typename Rhs,
typename Guess>
72 struct traits<solve_retval_with_guess<DecompositionType, Rhs, Guess> >
74 typedef typename DecompositionType::MatrixType MatrixType;
75 typedef Matrix<
typename Rhs::Scalar,
76 MatrixType::ColsAtCompileTime,
77 Rhs::ColsAtCompileTime,
78 Rhs::PlainObject::Options,
79 MatrixType::MaxColsAtCompileTime,
80 Rhs::MaxColsAtCompileTime> ReturnType;
83 template<
typename DecompositionType,
typename Rhs,
typename Guess>
struct solve_retval_with_guess
84 :
public ReturnByValue<solve_retval_with_guess<DecompositionType, Rhs, Guess> >
86 typedef typename DecompositionType::Index Index;
88 solve_retval_with_guess(
const DecompositionType& dec,
const Rhs& rhs,
const Guess& guess)
89 : m_dec(dec), m_rhs(rhs), m_guess(guess)
92 inline Index rows()
const {
return m_dec.cols(); }
93 inline Index cols()
const {
return m_rhs.cols(); }
95 template<
typename Dest>
inline void evalTo(Dest& dst)
const
98 m_dec._solveWithGuess(m_rhs,dst);
102 const DecompositionType& m_dec;
103 const typename Rhs::Nested m_rhs;
104 const typename Guess::Nested m_guess;
111 #endif // EIGEN_SPARSE_SOLVE_H