1// This file is part of Eigen, a lightweight C++ template library 2// for linear algebra. 3// 4// Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com> 5// 6// This Source Code Form is subject to the terms of the Mozilla 7// Public License v. 2.0. If a copy of the MPL was not distributed 8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9 10#ifndef EIGEN_MISC_SOLVE_H 11#define EIGEN_MISC_SOLVE_H 12 13namespace Eigen { 14 15namespace internal { 16 17/** \class solve_retval_base 18 * 19 */ 20template<typename DecompositionType, typename Rhs> 21struct traits<solve_retval_base<DecompositionType, Rhs> > 22{ 23 typedef typename DecompositionType::MatrixType MatrixType; 24 typedef Matrix<typename Rhs::Scalar, 25 MatrixType::ColsAtCompileTime, 26 Rhs::ColsAtCompileTime, 27 Rhs::PlainObject::Options, 28 MatrixType::MaxColsAtCompileTime, 29 Rhs::MaxColsAtCompileTime> ReturnType; 30}; 31 32template<typename _DecompositionType, typename Rhs> struct solve_retval_base 33 : public ReturnByValue<solve_retval_base<_DecompositionType, Rhs> > 34{ 35 typedef typename remove_all<typename Rhs::Nested>::type RhsNestedCleaned; 36 typedef _DecompositionType DecompositionType; 37 typedef ReturnByValue<solve_retval_base> Base; 38 typedef typename Base::Index Index; 39 40 solve_retval_base(const DecompositionType& dec, const Rhs& rhs) 41 : m_dec(dec), m_rhs(rhs) 42 {} 43 44 inline Index rows() const { return m_dec.cols(); } 45 inline Index cols() const { return m_rhs.cols(); } 46 inline const DecompositionType& dec() const { return m_dec; } 47 inline const RhsNestedCleaned& rhs() const { return m_rhs; } 48 49 template<typename Dest> inline void evalTo(Dest& dst) const 50 { 51 static_cast<const solve_retval<DecompositionType,Rhs>*>(this)->evalTo(dst); 52 } 53 54 protected: 55 const DecompositionType& m_dec; 56 typename Rhs::Nested m_rhs; 57}; 58 59} // end namespace internal 60 61#define EIGEN_MAKE_SOLVE_HELPERS(DecompositionType,Rhs) \ 62 typedef typename DecompositionType::MatrixType MatrixType; \ 63 typedef typename MatrixType::Scalar Scalar; \ 64 typedef typename MatrixType::RealScalar RealScalar; \ 65 typedef typename MatrixType::Index Index; \ 66 typedef Eigen::internal::solve_retval_base<DecompositionType,Rhs> Base; \ 67 using Base::dec; \ 68 using Base::rhs; \ 69 using Base::rows; \ 70 using Base::cols; \ 71 solve_retval(const DecompositionType& dec, const Rhs& rhs) \ 72 : Base(dec, rhs) {} 73 74} // end namespace Eigen 75 76#endif // EIGEN_MISC_SOLVE_H 77