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