10#ifndef EIGEN_SOLVERBASE_H
11#define EIGEN_SOLVERBASE_H
14#include "./InternalHeaderCheck.h"
20template <
typename Derived>
21struct solve_assertion {
22 template <
bool Transpose_,
typename Rhs>
23 static void run(
const Derived& solver,
const Rhs& b) {
24 solver.template _check_solve_assertion<Transpose_>(b);
28template <
typename Derived>
29struct solve_assertion<Transpose<Derived>> {
30 typedef Transpose<Derived> type;
32 template <
bool Transpose_,
typename Rhs>
33 static void run(
const type& transpose,
const Rhs& b) {
34 internal::solve_assertion<internal::remove_all_t<Derived>>::template run<true>(transpose.nestedExpression(), b);
38template <
typename Scalar,
typename Derived>
39struct solve_assertion<CwiseUnaryOp<
Eigen::internal::scalar_conjugate_op<Scalar>, const Transpose<Derived>>> {
40 typedef CwiseUnaryOp<Eigen::internal::scalar_conjugate_op<Scalar>,
const Transpose<Derived>> type;
42 template <
bool Transpose_,
typename Rhs>
43 static void run(
const type& adjoint,
const Rhs& b) {
44 internal::solve_assertion<internal::remove_all_t<Transpose<Derived>>>::template run<true>(
45 adjoint.nestedExpression(), b);
71template <
typename Derived>
75 typedef typename internal::traits<Derived>::Scalar Scalar;
76 typedef Scalar CoeffReturnType;
78 template <
typename Derived_>
79 friend struct internal::solve_assertion;
82 RowsAtCompileTime = internal::traits<Derived>::RowsAtCompileTime,
83 ColsAtCompileTime = internal::traits<Derived>::ColsAtCompileTime,
84 SizeAtCompileTime = (internal::size_of_xpr_at_compile_time<Derived>::ret),
85 MaxRowsAtCompileTime = internal::traits<Derived>::MaxRowsAtCompileTime,
86 MaxColsAtCompileTime = internal::traits<Derived>::MaxColsAtCompileTime,
87 MaxSizeAtCompileTime = internal::size_at_compile_time(internal::traits<Derived>::MaxRowsAtCompileTime,
88 internal::traits<Derived>::MaxColsAtCompileTime),
89 IsVectorAtCompileTime =
90 internal::traits<Derived>::MaxRowsAtCompileTime == 1 || internal::traits<Derived>::MaxColsAtCompileTime == 1,
91 NumDimensions = int(MaxSizeAtCompileTime) == 1 ? 0
92 : bool(IsVectorAtCompileTime) ? 1
105 template <
typename Rhs>
107 internal::solve_assertion<internal::remove_all_t<Derived>>::template run<false>(
derived(), b);
123 typedef std::conditional_t<NumTraits<Scalar>::IsComplex,
125 const ConstTransposeReturnType>
139 template <
bool Transpose_,
typename Rhs>
140 void _check_solve_assertion(
const Rhs& b)
const {
141 EIGEN_ONLY_USED_FOR_DEBUG(b);
142 eigen_assert(
derived().m_isInitialized &&
"Solver is not initialized.");
144 "SolverBase::solve(): invalid number of rows of the right hand side matrix b");
150template <
typename Derived>
151struct generic_xpr_base<Derived, MatrixXpr, SolverStorage> {
152 typedef SolverBase<Derived> type;
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition CwiseUnaryOp.h:53
Derived & derived()
Definition EigenBase.h:49
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:52
Pseudo expression representing a solving operation.
Definition Solve.h:62
A base class for matrix decomposition and solvers.
Definition SolverBase.h:72
SolverBase()
Definition SolverBase.h:97
const ConstTransposeReturnType transpose() const
Definition SolverBase.h:120
Derived & derived()
Definition EigenBase.h:49
const Solve< Derived, Rhs > solve(const MatrixBase< Rhs > &b) const
Definition SolverBase.h:106
const AdjointReturnType adjoint() const
Definition SolverBase.h:136
Expression of the transpose of a matrix.
Definition Transpose.h:56
Namespace containing all symbols from the Eigen library.
Definition Core:137
Definition EigenBase.h:33
EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition EigenBase.h:61
Derived & derived()
Definition EigenBase.h:49
EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition EigenBase.h:59