From: wolf Date: Tue, 30 Mar 2004 14:52:26 +0000 (+0000) Subject: Fix all the same problems that we had with SparseMatrix iterators. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d0cc58319975c76104de459a1647563a67d67b5;p=dealii-svn.git Fix all the same problems that we had with SparseMatrix iterators. git-svn-id: https://svn.dealii.org/trunk@8921 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/lac/include/lac/sparsity_pattern.h b/deal.II/lac/include/lac/sparsity_pattern.h index ba4a8cf5fc..fc8fb0f6c6 100644 --- a/deal.II/lac/include/lac/sparsity_pattern.h +++ b/deal.II/lac/include/lac/sparsity_pattern.h @@ -592,12 +592,27 @@ class SparsityPattern : public Subscriptor /** * STL-like iterator with the first entry * of row r. + * + * Note that if the given row is empty, + * i.e. does not contain any nonzero + * entries, then the iterator returned by + * this function equals + * end(r). Note also that the + * iterator may not be dereferencable in + * that case. */ iterator begin (const unsigned int r) const; /** * Final iterator of row * r. + * + * Note that the end iterator is not + * necessarily dereferencable. This is in + * particular the case if the row after + * the one for which this is the end + * iterator is empty, or if it is the end + * iterator for the last row of a matrix. */ iterator end (const unsigned int r) const; @@ -1633,7 +1648,16 @@ inline SparsityPattern::iterator SparsityPattern::begin () const { - return iterator(this, 0, 0); + // search for the first line with a nonzero + // number of entries + for (unsigned int r=0; r 0) + return iterator(this, r, 0); + + // alright, this matrix is completely + // empty. that's strange but ok. simply + // return the end() iterator + return end(); } @@ -1651,7 +1675,11 @@ SparsityPattern::iterator SparsityPattern::begin (const unsigned int r) const { Assert (r 0) + return iterator(this, r, 0); + else + return end (r); }