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,
    42     inline 
Index rows()
 const { 
return m_matrix.rows(); }
    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
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