]> https://gitweb.dealii.org/ - dealii.git/commit
Add a check when comparing iterators. 5325/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Wed, 25 Oct 2017 00:05:10 +0000 (18:05 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Wed, 25 Oct 2017 14:53:56 +0000 (08:53 -0600)
commit5cb3177f608b684c8e4c28bbae63138b5ce8a108
tree07966444577a6cbe2a20821efc0dcf21efa8dfe1
parent2b9a971049049ab1cd4df6c23b75785cad44ac6e
Add a check when comparing iterators.

Right now, comparing iterators only compares their level and index, but surprisingly
not the triangulation pointers. There is an assertion higher up that makes sure
that if the triangulation pointers of both objects are both non-nullptr, that they
are the same, but it is conceivable that one of the objects in invalid and the
other has a valid pointer. Internally, if that is the case, we have the invariant
that for iterators for which the triangulation pointer is nullptr, that the
level and index values are also invalid, and so nothing bad can happen (TM) with
the current code.

But it still seems prudent to also compare triangulation pointers, even if we know
that if one only of the pointers is nullptr, then the other comparisons for equality
must necessarily also fail because of the invariant -- we should just err on the
side of safety.

I've thought whether the pointers should be compared first or last. I put it first
because I think that the common case is to compare 'cell != endc', and in that
case one has a valid pointer and the other does not, so the first check will
already fail.
include/deal.II/grid/tria_accessor.templates.h

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.