25 #ifndef EIGEN_SPARSE_SOLVE_H
26 #define EIGEN_SPARSE_SOLVE_H
32 template<
typename _DecompositionType,
typename Rhs>
struct sparse_solve_retval_base;
33 template<
typename _DecompositionType,
typename Rhs>
struct sparse_solve_retval;
35 template<
typename DecompositionType,
typename Rhs>
36 struct traits<sparse_solve_retval_base<DecompositionType, Rhs> >
38 typedef typename DecompositionType::MatrixType MatrixType;
39 typedef SparseMatrix<typename Rhs::Scalar, Rhs::Options, typename Rhs::Index> ReturnType;
42 template<
typename _DecompositionType,
typename Rhs>
struct sparse_solve_retval_base
43 :
public ReturnByValue<sparse_solve_retval_base<_DecompositionType, Rhs> >
45 typedef typename remove_all<typename Rhs::Nested>::type RhsNestedCleaned;
46 typedef _DecompositionType DecompositionType;
47 typedef ReturnByValue<sparse_solve_retval_base>
Base;
48 typedef typename Base::Index Index;
50 sparse_solve_retval_base(
const DecompositionType& dec,
const Rhs& rhs)
51 : m_dec(dec), m_rhs(rhs)
54 inline Index
rows()
const {
return m_dec.cols(); }
55 inline Index
cols()
const {
return m_rhs.cols(); }
56 inline const DecompositionType& dec()
const {
return m_dec; }
57 inline const RhsNestedCleaned& rhs()
const {
return m_rhs; }
59 template<
typename Dest>
inline void evalTo(Dest& dst)
const
61 static_cast<const sparse_solve_retval<DecompositionType,Rhs>*
>(
this)->
evalTo(dst);
65 const DecompositionType& m_dec;
66 typename Rhs::Nested m_rhs;
69 #define EIGEN_MAKE_SPARSE_SOLVE_HELPERS(DecompositionType,Rhs) \
70 typedef typename DecompositionType::MatrixType MatrixType; \
71 typedef typename MatrixType::Scalar Scalar; \
72 typedef typename MatrixType::RealScalar RealScalar; \
73 typedef typename MatrixType::Index Index; \
74 typedef Eigen::internal::sparse_solve_retval_base<DecompositionType,Rhs> Base; \
79 sparse_solve_retval(const DecompositionType& dec, const Rhs& rhs) \
84 template<
typename DecompositionType,
typename Rhs,
typename Guess>
struct solve_retval_with_guess;
86 template<
typename DecompositionType,
typename Rhs,
typename Guess>
87 struct traits<solve_retval_with_guess<DecompositionType, Rhs, Guess> >
89 typedef typename DecompositionType::MatrixType MatrixType;
90 typedef Matrix<
typename Rhs::Scalar,
91 MatrixType::ColsAtCompileTime,
92 Rhs::ColsAtCompileTime,
93 Rhs::PlainObject::Options,
94 MatrixType::MaxColsAtCompileTime,
95 Rhs::MaxColsAtCompileTime> ReturnType;
98 template<
typename DecompositionType,
typename Rhs,
typename Guess>
struct solve_retval_with_guess
99 :
public ReturnByValue<solve_retval_with_guess<DecompositionType, Rhs, Guess> >
101 typedef typename DecompositionType::Index Index;
103 solve_retval_with_guess(
const DecompositionType& dec,
const Rhs& rhs,
const Guess& guess)
104 : m_dec(dec), m_rhs(rhs), m_guess(guess)
107 inline Index
rows()
const {
return m_dec.cols(); }
108 inline Index
cols()
const {
return m_rhs.cols(); }
110 template<
typename Dest>
inline void evalTo(Dest& dst)
const
113 m_dec._solveWithGuess(m_rhs,dst);
117 const DecompositionType& m_dec;
118 const typename Rhs::Nested m_rhs;
119 const typename Guess::Nested m_guess;
126 #endif // EIGEN_SPARSE_SOLVE_H