5#ifndef DUNE_ITERATORFACADES_HH
6#define DUNE_ITERATORFACADES_HH
140 template<
class T,
class V,
class R = V&,
class D = std::ptrdiff_t>
201 return static_cast<DerivedType const*
>(
this)->dereference();
206 return &(
static_cast<const DerivedType *
>(
this)->dereference());
235 template<
class T1,
class V1,
class R1,
class D,
236 class T2,
class V2,
class R2>
237 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
241 if(std::is_convertible<T2,T1>::value)
242 return static_cast<const T1&
>(lhs).equals(
static_cast<const T2&
>(rhs));
244 return static_cast<const T2&
>(rhs).equals(
static_cast<const T1&
>(lhs));
257 template<
class T1,
class V1,
class R1,
class D,
258 class T2,
class V2,
class R2>
259 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
263 if(std::is_convertible<T2,T1>::value)
264 return !
static_cast<const T1&
>(lhs).equals(
static_cast<const T2&
>(rhs));
266 return !
static_cast<const T2&
>(rhs).equals(
static_cast<const T1&
>(lhs));
273 template<
class T,
class V,
class R = V&,
class D = std::ptrdiff_t>
335 return static_cast<DerivedType const*
>(
this)->dereference();
340 return &(
static_cast<const DerivedType *
>(
this)->dereference());
382 template<
class T1,
class V1,
class R1,
class D,
383 class T2,
class V2,
class R2>
384 constexpr typename std::enable_if<std::is_convertible<T2,T1>::value,
bool>
::type
388 return static_cast<const T1&
>(lhs).equals(
static_cast<const T2&
>(rhs));
399 template<
class T1,
class V1,
class R1,
class D,
400 class T2,
class V2,
class R2>
402 typename std::enable_if<std::is_convertible<T1,T2>::value && !std::is_convertible<T2,T1>::value,
407 return static_cast<const T2&
>(rhs).equals(
static_cast<const T1&
>(lhs));
420 template<
class T1,
class V1,
class R1,
class D,
421 class T2,
class V2,
class R2>
422 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
426 return !(lhs == rhs);
433 template<
class T,
class V,
class R = V&,
class D = std::ptrdiff_t>
503 return static_cast<DerivedType const*
>(
this)->dereference();
508 return &(
static_cast<const DerivedType *
>(
this)->dereference());
518 return static_cast<const DerivedType *
>(
this)->elementAt(n);
591 template<
class T1,
class V1,
class R1,
class D,
592 class T2,
class V2,
class R2>
593 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
597 if(std::is_convertible<T2,T1>::value)
598 return static_cast<const T1&
>(lhs).equals(
static_cast<const T2&
>(rhs));
600 return static_cast<const T2&
>(rhs).equals(
static_cast<const T1&
>(lhs));
613 template<
class T1,
class V1,
class R1,
class D,
614 class T2,
class V2,
class R2>
615 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
619 if(std::is_convertible<T2,T1>::value)
620 return !
static_cast<const T1&
>(lhs).equals(
static_cast<const T2&
>(rhs));
622 return !
static_cast<const T2&
>(rhs).equals(
static_cast<const T1&
>(lhs));
635 template<
class T1,
class V1,
class R1,
class D,
636 class T2,
class V2,
class R2>
641 if(std::is_convertible<T2,T1>::value)
642 return static_cast<const T1&
>(lhs).distanceTo(
static_cast<const T2&
>(rhs))>0;
644 return static_cast<const T2&
>(rhs).distanceTo(
static_cast<const T1&
>(lhs))<0;
658 template<
class T1,
class V1,
class R1,
class D,
659 class T2,
class V2,
class R2>
664 if(std::is_convertible<T2,T1>::value)
665 return static_cast<const T1&
>(lhs).distanceTo(
static_cast<const T2&
>(rhs))>=0;
667 return static_cast<const T2&
>(rhs).distanceTo(
static_cast<const T1&
>(lhs))<=0;
681 template<
class T1,
class V1,
class R1,
class D,
682 class T2,
class V2,
class R2>
683 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
687 if(std::is_convertible<T2,T1>::value)
688 return static_cast<const T1&
>(lhs).distanceTo(
static_cast<const T2&
>(rhs))<0;
690 return static_cast<const T2&
>(rhs).distanceTo(
static_cast<const T1&
>(lhs))>0;
703 template<
class T1,
class V1,
class R1,
class D,
704 class T2,
class V2,
class R2>
705 constexpr typename EnableIfInterOperable<T1,T2,bool>::type
709 if(std::is_convertible<T2,T1>::value)
710 return static_cast<const T1&
>(lhs).distanceTo(
static_cast<const T2&
>(rhs))<=0;
712 return static_cast<const T2&
>(rhs).distanceTo(
static_cast<const T1&
>(lhs))>=0;
725 template<
class T1,
class V1,
class R1,
class D,
726 class T2,
class V2,
class R2>
727 constexpr typename EnableIfInterOperable<T1,T2,D>::type
731 if(std::is_convertible<T2,T1>::value)
732 return -
static_cast<const T1&
>(lhs).distanceTo(
static_cast<const T2&
>(rhs));
734 return static_cast<const T2&
>(rhs).distanceTo(
static_cast<const T1&
>(lhs));
748 template<
class ProxyType>
753 noexcept(std::is_nothrow_constructible_v<ProxyType, ProxyType&&>)
758 noexcept(std::is_nothrow_constructible_v<ProxyType, const ProxyType&>)
790 static constexpr auto baseIterator(It&& it)
noexcept
791 ->
decltype(it.baseIterator())
793 return it.baseIterator();
798 static constexpr auto derived(It&& it)
noexcept
799 ->
decltype(it.derived())
808 namespace Impl::Concepts {
813 struct BaseIterDereferenceOp
816 auto require(
const It& it) ->
decltype(
817 *(IteratorFacadeAccess::baseIterator(it)),
824 template<
class It1,
class It2>
825 auto require(
const It1& it1,
const It2& it2) ->
decltype(
830 struct BaseIterEqualsOp
832 template<
class It1,
class It2>
833 auto require(
const It1& it1,
const It2& it2) ->
decltype(
838 struct BaseIterIncrementOp
841 auto require(It it) ->
decltype(
842 ++(IteratorFacadeAccess::baseIterator(it))
846 struct BaseIterDecrementOp
849 auto require(It it) ->
decltype(
850 --(IteratorFacadeAccess::baseIterator(it))
858 auto require(It it) ->
decltype(
859 it += std::declval<D>()
864 struct BaseIterAdvanceOp
867 auto require(It it) ->
decltype(
868 IteratorFacadeAccess::baseIterator(it) += std::declval<D>()
873 struct IterDistanceOp
875 template<
class It1,
class It2>
876 auto require(
const It1& it1,
const It2& it2) ->
decltype(
882 struct BaseIterDistanceOp
884 template<
class It1,
class It2>
885 auto require(
const It1& it1,
const It2& it2) ->
decltype(
1051 template<
class It,
class C,
class V,
class R = V&,
class P = V*,
class D = std::ptrdiff_t>
1052 class IteratorFacade
1054 static constexpr bool isBidirectional = std::is_convertible_v<C, std::bidirectional_iterator_tag>;
1055 static constexpr bool isRandomAccess = std::is_convertible_v<C, std::random_access_iterator_tag>;
1060 friend IteratorFacadeAccess;
1065 using DerivedIterator = It;
1068 constexpr const DerivedIterator& derived()
const
1070 return static_cast<const DerivedIterator&
>(*this);
1074 constexpr DerivedIterator& derived()
1076 return static_cast<DerivedIterator&
>(*this);
1082 using iterator_category = C;
1083 using value_type =
typename std::remove_const<V>::type;
1084 using reference = R;
1086 using difference_type = D;
1089 using Value = value_type;
1090 using Reference = reference;
1091 using Pointer = pointer;
1092 using DifferenceType = difference_type;
1097 static_assert(std::is_signed_v<difference_type>,
1098 "Type used as difference_type must be signed");
1099 const DerivedIterator& constDerived = derived();
1100 static_assert(std::is_convertible_v<
decltype(*constDerived), reference>,
1101 "Derived class does not implement `*it` or `*(it.baseIterator())` for const `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
1102 static_assert(std::is_convertible_v<
decltype(++derived()), DerivedIterator&>,
1103 "Derived class does not implement `++it`, `++(it.baseIterator())`, or `it+=1` for mutable `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
1104 static_assert(std::is_convertible_v<
decltype(constDerived==constDerived),
bool>,
1105 "Derived class does not implement `it1==it2` or `it1.baseIterator()==it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
1106 if constexpr (isBidirectional)
1107 static_assert(std::is_convertible_v<
decltype(--derived()), DerivedIterator&>,
1108 "Derived class does not implement `--it`, `--(it.baseIterator())`, or `it-=1` for mutable `it` required by IteratorFacade<..., std::bidirectional_iterator_tag, ...>.");
1109 if constexpr (isRandomAccess)
1111 static_assert(std::is_convertible_v<decltype(derived()+=std::declval<difference_type>()), DerivedIterator&>,
1112 "Derived class does not implement `it+=` or `it.baseIterator()+=` for mutable `it` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
1113 static_assert(std::is_convertible_v<
decltype(constDerived-constDerived), difference_type>,
1114 "Derived class does not implement `it1-it2` or `it1.baseIterator()-it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
1119 constexpr decltype(
auto)
operator*()
const
1122 return *(IteratorFacadeAccess::baseIterator(derived()));
1125 "Derived class does not implement `*it` or `*(it.baseIterator())` for const `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
1131 if constexpr (std::is_pointer_v<pointer>)
1132 return std::addressof(*derived());
1134 return pointer(*derived());
1138 constexpr decltype(
auto)
operator++()
1142 ++(IteratorFacadeAccess::baseIterator(derived()));
1152 "Derived class does not implement `++it`, `++(it.baseIterator())`, or `it+=1` for mutable `it` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
1158 DerivedIterator tmp(derived());
1168 template<
bool dummy=true, std::enable_if_t<isB
idirectional and dummy,
int> =0>
1169 constexpr decltype(
auto)
operator--()
1173 --(IteratorFacadeAccess::baseIterator(derived()));
1183 "Derived class does not implement `--it`, `--(it.baseIterator())`, or `it-=1` for mutable `it` required by IteratorFacade<..., std::bidirectional_iterator_tag, ...>.");
1191 template<
bool dummy=true, std::enable_if_t<isB
idirectional and dummy,
int> =0>
1194 DerivedIterator tmp(derived());
1206 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
1209 return *(derived()+n);
1217 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
1218 constexpr decltype(
auto)
operator+=(difference_type n)
1222 IteratorFacadeAccess::baseIterator(derived()) += n;
1227 "Derived class does not implement `it+=` or `it.baseIterator()+=` for mutable `it` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
1235 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
1236 constexpr DerivedIterator
operator+(difference_type n)
const
1238 DerivedIterator tmp(derived());
1248 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
1249 friend constexpr DerivedIterator
operator+(difference_type n,
const IteratorFacade& it)
1251 DerivedIterator tmp(it.derived());
1261 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
1273 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
1274 constexpr DerivedIterator
operator-(difference_type n)
const
1276 DerivedIterator tmp(derived());
1295 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D1,
class D2>
1296 constexpr auto operator==(
const IteratorFacade<T1,C,V1,R1,P1,D1>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
1298 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1299 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1301 return IteratorFacadeAccess::baseIterator(derivedIt1) == IteratorFacadeAccess::baseIterator(derivedIt2);
1304 "Derived class does not implement `it1==it2` or `it1.baseIterator()==it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::forward_iterator_tag, ...>.");
1314 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D1,
class D2,
1315 std::enable_if_t< Dune::models<Impl::Concepts::IterEqualsOp,T1, T2>() ,
int> =0>
1316 constexpr bool operator!=(
const IteratorFacade<T1,C,V1,R1,P1,D1>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
1318 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1319 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1320 return not(derivedIt1 == derivedIt2);
1333 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D>
1334 constexpr auto operator-(
const IteratorFacade<T1,C,V1,R1,P1,D>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D>& it2)
1336 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1337 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1339 return D(IteratorFacadeAccess::baseIterator(derivedIt1) - IteratorFacadeAccess::baseIterator(derivedIt2));
1342 "Derived class does not implement `it1-it2` or `it1.baseIterator()-it2.baseIterator()` for const `it1` and `it2` required by IteratorFacade<..., std::random_access_iterator_tag, ...>.");
1352 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D1,
class D2,
1353 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() ,
int> =0>
1354 constexpr bool operator<(
const IteratorFacade<T1,C,V1,R1,P1,D1>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
1356 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1357 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1358 return (derivedIt1 - derivedIt2) < D1(0);
1368 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D1,
class D2,
1369 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() ,
int> =0>
1370 constexpr bool operator<=(
const IteratorFacade<T1,C,V1,R1,P1,D1>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
1372 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1373 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1374 return (derivedIt1 - derivedIt2) <= D1(0);
1384 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D1,
class D2,
1385 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() ,
int> =0>
1386 constexpr bool operator>(
const IteratorFacade<T1,C,V1,R1,P1,D1>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
1388 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1389 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1390 return (derivedIt1 - derivedIt2) > D1(0);
1400 template<
class T1,
class T2,
class C,
class V1,
class V2,
class R1,
class R2,
class P1,
class P2,
class D1,
class D2,
1401 std::enable_if_t< Dune::models<Impl::Concepts::IterDistanceOp<D1>,T1, T2>() ,
int> =0>
1402 constexpr bool operator>=(
const IteratorFacade<T1,C,V1,R1,P1,D1>& it1,
const IteratorFacade<T2,C,V2,R2,P2,D2>& it2)
1404 const T1& derivedIt1 = IteratorFacadeAccess::derived(it1);
1405 const T2& derivedIt2 = IteratorFacadeAccess::derived(it2);
1406 return (derivedIt1 - derivedIt2) >= D1(0);
1434 template<
class IteratorImpl,
class IteratorTraits>
1437 typename IteratorTraits::iterator_category,
1438 typename IteratorTraits::value_type,
1439 typename IteratorTraits::reference,
1440 typename IteratorTraits::pointer,
1441 typename IteratorTraits::difference_type>;
1458 template<
class IteratorCategory,
class Reference,
class DifferenceType = std::ptrdiff_t>
Traits for type conversions and type information.
Infrastructure for concepts.
typename AutonomousValueType< T >::type AutonomousValue
Type free of internal references that T can be converted to.
Definition typetraits.hh:566
constexpr auto models()
Check if concept is modeled by given types.
Definition concept.hh:183
bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:565
bigunsignedint< k > operator+(const bigunsignedint< k > &x, std::uintmax_t y)
Definition bigunsignedint.hh:558
constexpr decltype(auto) operator++()
Preincrement operator.
Definition iteratorfacades.hh:1138
constexpr EnableIfInterOperable< T1, T2, bool >::type operator>(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
Comparison operator.
Definition iteratorfacades.hh:684
constexpr pointer operator->() const
Arrow access to members of referenced value.
Definition iteratorfacades.hh:1129
constexpr reference operator[](difference_type n) const
Dereference element with given offset form this iterator.
Definition iteratorfacades.hh:1207
constexpr EnableIfInterOperable< T1, T2, bool >::type operator<(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
Comparison operator.
Definition iteratorfacades.hh:638
constexpr EnableIfInterOperable< T1, T2, bool >::type operator<=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
Comparison operator.
Definition iteratorfacades.hh:661
constexpr decltype(auto) operator--()
Predecrement operator.
Definition iteratorfacades.hh:1169
Dune::IteratorFacade< IteratorImpl, typename IteratorTraits::iterator_category, typename IteratorTraits::value_type, typename IteratorTraits::reference, typename IteratorTraits::pointer, typename IteratorTraits::difference_type > IteratorFacadeForTraits
Alias for the CRTP-Mixing class IteratorFacade.
Definition iteratorfacades.hh:1435
constexpr EnableIfInterOperable< T1, T2, bool >::type operator>=(const RandomAccessIteratorFacade< T1, V1, R1, D > &lhs, const RandomAccessIteratorFacade< T2, V2, R2, D > &rhs)
Comparison operator.
Definition iteratorfacades.hh:706
constexpr DerivedIterator & operator-=(difference_type n)
Decrement iterator by given value.
Definition iteratorfacades.hh:1262
MPI_Datatype MPITraits< ParallelLocalIndex< T > >::type
Definition plocalindex.hh:317
Dune namespace
Definition alignedallocator.hh:13
constexpr auto operator!=(const HybridMultiIndex< S... > &lhs, const HybridMultiIndex< T... > &rhs)
Compare two HybridMultiIndexs for inequality.
Definition hybridmultiindex.hh:441
constexpr bool operator==(const HybridMultiIndex< S... > &lhs, const HybridMultiIndex< T... > &rhs)
Compare two HybridMultiIndexs for value equality.
Definition hybridmultiindex.hh:404
Namespace for concepts.
Definition concept.hh:33
constexpr bool requireConvertible()
Definition concept.hh:246
Base class for stl conformant forward iterators.
Definition iteratorfacades.hh:142
std::forward_iterator_tag iterator_category
Definition iteratorfacades.hh:146
V * pointer
Definition iteratorfacades.hh:149
constexpr DerivedType & operator++()
Preincrement operator.
Definition iteratorfacades.hh:210
constexpr Reference operator*() const
Dereferencing operator.
Definition iteratorfacades.hh:199
D DifferenceType
The type of the difference between two positions.
Definition iteratorfacades.hh:191
R Reference
The type of the reference to the values accessed.
Definition iteratorfacades.hh:196
constexpr DerivedType operator++(int)
Postincrement operator.
Definition iteratorfacades.hh:217
T DerivedType
The type of derived iterator.
Definition iteratorfacades.hh:176
V Value
The type of value accessed through the iterator.
Definition iteratorfacades.hh:181
constexpr Pointer operator->() const
Definition iteratorfacades.hh:204
typename std::remove_const< V >::type value_type
Definition iteratorfacades.hh:147
V * Pointer
The pointer to the Value.
Definition iteratorfacades.hh:186
D difference_type
Definition iteratorfacades.hh:148
R reference
Definition iteratorfacades.hh:150
Facade class for stl conformant bidirectional iterators.
Definition iteratorfacades.hh:275
V * pointer
Definition iteratorfacades.hh:282
typename std::remove_const< V >::type value_type
Definition iteratorfacades.hh:280
D difference_type
Definition iteratorfacades.hh:281
constexpr Reference operator*() const
Dereferencing operator.
Definition iteratorfacades.hh:333
constexpr Pointer operator->() const
Definition iteratorfacades.hh:338
T DerivedType
The type of derived iterator.
Definition iteratorfacades.hh:310
constexpr DerivedType & operator++()
Preincrement operator.
Definition iteratorfacades.hh:344
V * Pointer
The pointer to the Value.
Definition iteratorfacades.hh:320
R Reference
The type of the reference to the values accessed.
Definition iteratorfacades.hh:330
constexpr DerivedType operator--(int)
Postincrement operator.
Definition iteratorfacades.hh:367
std::bidirectional_iterator_tag iterator_category
Definition iteratorfacades.hh:279
D DifferenceType
The type of the difference between two positions.
Definition iteratorfacades.hh:325
R reference
Definition iteratorfacades.hh:283
constexpr DerivedType operator++(int)
Postincrement operator.
Definition iteratorfacades.hh:351
constexpr DerivedType & operator--()
Preincrement operator.
Definition iteratorfacades.hh:360
V Value
The type of value accessed through the iterator.
Definition iteratorfacades.hh:315
Base class for stl conformant forward iterators.
Definition iteratorfacades.hh:435
typename std::remove_const< V >::type value_type
Definition iteratorfacades.hh:440
D difference_type
Definition iteratorfacades.hh:441
constexpr Reference operator[](DifferenceType n) const
Get the element n positions from the current one.
Definition iteratorfacades.hh:516
constexpr Pointer operator->() const
Definition iteratorfacades.hh:506
V * pointer
Definition iteratorfacades.hh:442
std::random_access_iterator_tag iterator_category
Definition iteratorfacades.hh:439
constexpr DerivedType & operator--()
Predecrement operator.
Definition iteratorfacades.hh:551
R reference
Definition iteratorfacades.hh:443
D DifferenceType
The type of the difference between two positions.
Definition iteratorfacades.hh:493
constexpr DerivedType operator++(int)
Postincrement operator.
Definition iteratorfacades.hh:529
constexpr DerivedType & operator+=(DifferenceType n)
Definition iteratorfacades.hh:536
constexpr DerivedType operator--(int)
Postdecrement operator.
Definition iteratorfacades.hh:558
constexpr DerivedType operator-(DifferenceType n) const
Definition iteratorfacades.hh:571
T DerivedType
The type of derived iterator.
Definition iteratorfacades.hh:478
V * Pointer
The pointer to the Value.
Definition iteratorfacades.hh:488
V Value
The type of value accessed through the iterator.
Definition iteratorfacades.hh:483
constexpr DerivedType & operator-=(DifferenceType n)
Definition iteratorfacades.hh:565
constexpr Reference operator*() const
Dereferencing operator.
Definition iteratorfacades.hh:501
constexpr DerivedType & operator++()
Preincrement operator.
Definition iteratorfacades.hh:522
constexpr DerivedType operator+(DifferenceType n) const
Definition iteratorfacades.hh:542
R Reference
The type of the reference to the values accessed.
Definition iteratorfacades.hh:498
Helper to mimic a pointer for proxy objects.
Definition iteratorfacades.hh:750
constexpr ProxyArrowResult(const ProxyType &p) noexcept(std::is_nothrow_constructible_v< ProxyType, const ProxyType & >)
Definition iteratorfacades.hh:757
constexpr ProxyType * operator->() noexcept
Definition iteratorfacades.hh:767
constexpr const ProxyType * operator->() const noexcept
Definition iteratorfacades.hh:762
constexpr ProxyArrowResult(ProxyType &&p) noexcept(std::is_nothrow_constructible_v< ProxyType, ProxyType && >)
Definition iteratorfacades.hh:752
This class encapsulates access of IteratorFacade.
Definition iteratorfacades.hh:786
An iterator_traits class providing sensible defaults.
Definition iteratorfacades.hh:1460
IteratorCategory iterator_category
Definition iteratorfacades.hh:1461
Reference reference
Definition iteratorfacades.hh:1462
Dune::AutonomousValue< reference > value_type
Definition iteratorfacades.hh:1463
DifferenceType difference_type
Definition iteratorfacades.hh:1465
std::conditional_t< std::is_lvalue_reference_v< reference >, value_type *, Dune::ProxyArrowResult< reference > > pointer
Definition iteratorfacades.hh:1464
Enable typedef if two types are interoperable.
Definition typetraits.hh:81
template which always yields a false value
Definition typetraits.hh:124