[Dune-devel] Random-Access Iterators

Christian Engwer christian.engwer at uni-muenster.de
Wed Oct 1 12:38:07 CEST 2014


Hi Oli,

> - was this discussed in Berlin?  I can't find it in the meeting minutes,

it was one of the off-topic discussion and thus not included in the
minutes. The question in Berlin was "why do we have to limit people to
a forward_iterator?". In this sense it is a new proposal, extending
what we decided in Berlin.

> - what is the use-case for random access iterators?

One use case is for thread parallel assembly to split the iterator
range. Would it makes sense to collect use-cases? One other this is
intuition... why should yaspgrid only allow forward iterators if we
can compute everything directly in an efficient manner?

Ciao
Christian

> Again, this is not to say that I object to the feature.
> Cheers,
> Oliver
> 
> Am 30.09.2014 um 23:17 schrieb Jö Fahlke:
> > Hi!
> > 
> > The random-access entity iterators are now ready for general review.
> > https://cgit.dune-project.org/repositories/dune-grid/log/?h=feature/random-access-entity-iterators
> > 
> > @Carsten: are you willing to include this in 2.4, provided noone finds any
> >           serious issues?
> > 
> > A grid declares that certain entity iterators are random-access by doing
> > 
> >   typedef std::random_access_iterator_tag iterator_category;
> > 
> > in the iterator implementation class.  The facade class Dune::EntityIterator
> > notices this and defines the additional methods needed for random access
> > iterators in terms of the member functions advance(n) and distanceTo(otherIt)
> > of the iterator implementation class.  If your grids entity iterators do
> > 
> >   typedef std::forward_iterator_tag iterator_category;
> > 
> > or omit the member type completely, the EntityIterator will be a forward
> > interator, as before.
> > 
> > To do this, Dune::EntityIterator no longer implements the iterator methods
> > itself, but derives from Dune::EntityIteratorBase, which has a template
> > parameter category to select which type of iterator to implement.  Previously
> > the ancestry looked like
> > 
> >   EntityPointer
> >   EntityIterator
> > 
> > now it looks like (for forward iterators)
> > 
> >   EntityPointer
> >   EntityIteratorBase<..., std::forward_iterator_tag>
> >   EntityIterator
> > 
> > or (for random access iterators)
> > 
> >   EntityPointer
> >   EntityIteratorBase<..., std::forward_iterator_tag>
> >   EntityIteratorBase<..., std::random_access_iterator_tag>
> >   EntityIterator
> > 
> > The template argument list of EntityIterator is completely the same as before.
> > 
> > There is one function that has been omitted from random access iterators for
> > the time being, namely operator[].  There are three possibilities for the
> > return type of operator[]: Either return the entity by value -- but that needs
> > copyable entities, which are not ready yet.  Or return a reference to the
> > entity -- not possible, since we have nothing that stores that entity.  Or
> > return a proxy object -- but I'm too lazy to implement that, since we will
> > have copyable entities soon.  Note that instead of the (currently) invalid
> > expression "it[n]" you can write "*(it+n)": The + creates a temporary
> > iterator that holds the entity.
> > 
> > I also omitted implementing bidirectional iterators, since I could not come up
> > with a use case for iterating backwards through the grid.  If a grid declares
> > an iterator implementation as bidirectional, the resulting EntityIterator will
> > nevertheless just be a forward iterator.  It should be easy to add
> > bidirectional iterators, should the need arise.
> > 
> > Regards,
> > Jö.
> > 
> > 
> > 
> > _______________________________________________
> > Dune-devel mailing list
> > Dune-devel at dune-project.org
> > http://lists.dune-project.org/mailman/listinfo/dune-devel
> > 
> 
> 



> _______________________________________________
> Dune-devel mailing list
> Dune-devel at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-devel


-- 
Prof. Dr. Christian Engwer 
Institut für Numerische und Angewandte Mathematik
Fachbereich Mathematik und Informatik der Universität Münster
Einsteinstrasse 62
48149 Münster

E-Mail	christian.engwer at uni-muenster.de
Telefon	+49 251 83-35067
FAX		+49 251 83-32729




More information about the Dune-devel mailing list