[Dune-devel] Random-Access Iterators

Oliver Sander sander at igpm.rwth-aachen.de
Wed Oct 1 08:58:23 CEST 2014


Hi Jö,
thanks for the work.  As usual, it seems very well thought-out.
However, mainly to satisfy my curiosity, here a two questions:
- was this discussed in Berlin?  I can't find it in the meeting minutes,
- what is the use-case for random access iterators?
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
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <https://lists.dune-project.org/pipermail/dune-devel/attachments/20141001/46808ebe/attachment.sig>


More information about the Dune-devel mailing list