Change meaning of function template in TransformedRangeIterator
So far the template parameter F
was interpreted as function
and a const F*
was stored. With this patch F
is directly
interpreted as pointer_type and the *
is added in the
TransformedRangeView
.
This allows to use other pointer-like types than const F*
.
E.g. TransformedRangeView
now uses F*
for a non-const
iterator, such that the transformation calls a non-const
operator()
for non-const interators. Thus one can use
TransformedRangeIterator
to create self-contained
mutable ranges on the fly, which was not possible before
(either mutable with reference capture or self-contained
but non-mutable).
A test for the new feature is added. This also contains a handy utility for combined mutable/nonmutable capture which is not directly possible with plain lambdas. Maybe we later want to make this public.
This patch potentially also allows to create self-contained
TransformedRangeIterator
s by passing e.g. an optional
(pointer-like but stores a value) as F
. However, this
should be carefully tested and - if working correctly - be
accessible publicly in namespace Dune::
.