11 #ifndef EIGEN_SPARSE_TRIANGULARVIEW_H 12 #define EIGEN_SPARSE_TRIANGULARVIEW_H 18 template<
typename MatrixType,
int Mode>
20 :
public traits<MatrixType>
30 SkipLast = !SkipFirst,
43 inline Index cols()
const {
return m_matrix.cols(); }
54 template<
typename OtherDerived>
65 template<
typename MatrixType,
int Mode>
68 typedef typename MatrixTypeNestedCleaned::InnerIterator
Base;
73 : Base(view.nestedExpression(), outer), m_returnOne(false)
77 while((*
this) && ((HasUnitDiag||SkipDiag) ? this->index()<=outer : this->index()<outer))
82 else if(HasUnitDiag && ((!Base::operator
bool()) || Base::index()>=Base::outer()))
84 if((!SkipFirst) && Base::operator
bool())
92 if(HasUnitDiag && m_returnOne)
97 if(HasUnitDiag && (!SkipFirst) && ((!Base::operator
bool()) || Base::index()>=Base::outer()))
99 if((!SkipFirst) && Base::operator
bool())
107 inline Index
row()
const {
return (MatrixType::Flags&
RowMajorBit ? Base::outer() : this->index()); }
108 inline Index
col()
const {
return (MatrixType::Flags&
RowMajorBit ? this->index() : Base::outer()); }
111 if(HasUnitDiag && m_returnOne)
return Base::outer();
112 else return Base::index();
116 if(HasUnitDiag && m_returnOne)
return Scalar(1);
117 else return Base::value();
122 if(HasUnitDiag && m_returnOne)
124 if(SkipFirst)
return Base::operator bool();
127 if (SkipDiag)
return (Base::operator
bool() && this->index() < this->outer());
128 else return (Base::operator
bool() && this->index() <= this->outer());
135 template<
typename MatrixType,
int Mode>
138 typedef typename MatrixTypeNestedCleaned::ReverseInnerIterator
Base;
143 : Base(view.nestedExpression(), outer)
145 eigen_assert((!HasUnitDiag) &&
"ReverseInnerIterator does not support yet triangular views with a unit diagonal");
147 while((*
this) && (SkipDiag ? this->index()>=outer : this->index()>outer))
153 { Base::operator--();
return *
this; }
160 if (SkipLast)
return Base::operator bool() ;
163 if(SkipDiag)
return (Base::operator
bool() && this->index() > this->outer());
164 else return (Base::operator
bool() && this->index() >= this->outer());
169 template<
typename Derived>
179 #endif // EIGEN_SPARSE_TRIANGULARVIEW_H internal::remove_reference< MatrixTypeNested >::type MatrixTypeNestedNonRef
#define EIGEN_STRONG_INLINE
EIGEN_STRONG_INLINE InnerIterator(const SparseTriangularView &view, Index outer)
SparseTriangularView::Index Index
MatrixType::Nested MatrixTypeNested
iterative scaling algorithm to equilibrate rows and column norms in matrices
EIGEN_STRONG_INLINE ReverseInnerIterator & operator--()
const unsigned int RowMajorBit
MatrixTypeNestedCleaned::InnerIterator Base
EIGEN_STRONG_INLINE InnerIterator & operator++()
SparseTriangularView(const MatrixType &matrix)
#define EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
Base class of any sparse matrices or sparse expressions.
const SparseTriangularView< Derived, Mode > triangularView() const
internal::traits< SparseTriangularView< MatrixType, Mode > >::Scalar Scalar
MatrixTypeNested m_matrix
internal::traits< Derived >::Index Index
const MatrixTypeNestedCleaned & nestedExpression() const
The matrix class, also used for vectors and row-vectors.
Base class for all dense matrices, vectors, and expressions.
SparseTriangularView::Index Index
EIGEN_STRONG_INLINE ReverseInnerIterator(const SparseTriangularView &view, Index outer)
MatrixTypeNestedCleaned::ReverseInnerIterator Base
internal::remove_all< MatrixTypeNested >::type MatrixTypeNestedCleaned