[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