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());
219 DerivedType tmp(static_cast<DerivedType const&>(*
this));
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());
353 DerivedType tmp(static_cast<DerivedType const&>(*
this));
369 DerivedType tmp(static_cast<DerivedType const&>(*
this));
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);
531 DerivedType tmp(static_cast<DerivedType const&>(*
this));
544 DerivedType tmp(static_cast<DerivedType const&>(*
this));
560 DerivedType tmp(static_cast<DerivedType const&>(*
this));
573 DerivedType tmp(static_cast<DerivedType const&>(*
this));
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>
637 constexpr
typename EnableIfInterOperable<T1,T2,bool>::type
638 operator<(const RandomAccessIteratorFacade<T1,V1,R1,D>& lhs,
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>
660 constexpr
typename EnableIfInterOperable<T1,T2,bool>::type
661 operator<=(const RandomAccessIteratorFacade<T1,V1,R1,D>& lhs,
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(
826 requireConvertible<bool>(it1 == it2)
830 struct BaseIterEqualsOp
832 template<
class It1,
class It2>
833 auto require(
const It1& it1,
const It2& it2) -> decltype(
834 Dune::Concept::requireConvertible<bool>(IteratorFacadeAccess::baseIterator(it1) == IteratorFacadeAccess::baseIterator(it2))
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(
877 Dune::Concept::requireConvertible<D>(it1 - it2)
882 struct BaseIterDistanceOp
884 template<
class It1,
class It2>
885 auto require(
const It1& it1,
const It2& it2) -> decltype(
886 Dune::Concept::requireConvertible<D>(IteratorFacadeAccess::baseIterator(it1) - IteratorFacadeAccess::baseIterator(it2))
1051 template<
class It,
class C,
class V,
class R = V&,
class P = V*,
class D = std::ptrdiff_t>
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>;
1097 static_assert(std::is_signed_v<difference_type>,
1098 "Type used as difference_type must be signed");
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());
1138 constexpr decltype(
auto) operator++()
1140 if constexpr (Dune::models<Impl::Concepts::BaseIterIncrementOp, DerivedIterator>())
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, ...>.");
1168 template<
bool dummy=true, std::enable_if_t<isB
idirectional and dummy,
int> =0>
1169 constexpr decltype(
auto) operator--()
1171 if constexpr (Dune::models<Impl::Concepts::BaseIterDecrementOp, DerivedIterator>())
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>
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>
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>
1248 template<
bool dummy=true, std::enable_if_t<isRandomAccess and dummy,
int> =0>
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>
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);
1300 if constexpr (Dune::models<Impl::Concepts::BaseIterEqualsOp, T1, T2>())
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);
1338 if constexpr (
Dune::models<Impl::Concepts::BaseIterDistanceOp<D>,T1, T2>())
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>
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 Reference operator[](DifferenceType n) const
Get the element n positions from the current one.
Definition: iteratorfacades.hh:516
V * Pointer
The pointer to the Value.
Definition: iteratorfacades.hh:488
T DerivedType
The type of derived iterator.
Definition: iteratorfacades.hh:310
V Value
The type of value accessed through the iterator.
Definition: iteratorfacades.hh:483
T DerivedType
The type of derived iterator.
Definition: iteratorfacades.hh:176
int difference_type
Definition: iteratorfacades.hh:281
constexpr Pointer operator->() const
Definition: iteratorfacades.hh:338
constexpr auto models()
Check if concept is modeled by given types.
Definition: concept.hh:183
constexpr pointer operator->() const
Arrow access to members of referenced value.
Definition: iteratorfacades.hh:1129
constexpr DerivedType & operator++()
Preincrement operator.
Definition: iteratorfacades.hh:344
friend constexpr DerivedIterator operator+(difference_type n, const IteratorFacade &it)
Create iterator incremented by given value.
Definition: iteratorfacades.hh:1249
reference Reference
Definition: iteratorfacades.hh:1090
constexpr DerivedType operator--(int)
Postincrement operator.
Definition: iteratorfacades.hh:367
Helper to mimic a pointer for proxy objects.
Definition: iteratorfacades.hh:749
constexpr DerivedType & operator+=(DifferenceType n)
Definition: iteratorfacades.hh:536
Base class for stl conformant forward iterators.
Definition: iteratorfacades.hh:141
Information about an index residing on another processor.
Definition: remoteindices.hh:55
R * pointer
Definition: iteratorfacades.hh:1085
constexpr DerivedIterator & operator-=(difference_type n)
Decrement iterator by given value.
Definition: iteratorfacades.hh:1262
constexpr Reference operator*() const
Dereferencing operator.
Definition: iteratorfacades.hh:333
D reference
Definition: iteratorfacades.hh:1084
constexpr DerivedType operator--(int)
Postdecrement operator.
Definition: iteratorfacades.hh:558
Dune::RandomAccessIteratorFacade< ConstArrayListIterator< IndexPair< TG, TL >, N, std::allocator< Dune::IndexPair< TG, TL > > >, const std::allocator< Dune::IndexPair< TG, TL > > ::value_type, std::allocator< Dune::IndexPair< TG, TL > > ::value_type const &, std::allocator< Dune::IndexPair< TG, TL > > ::difference_type >::difference_type std::allocator< Dune::IndexPair< TG, TL > > ::difference_type difference_type
Definition: iteratorfacades.hh:441
constexpr Reference operator*() const
Dereferencing operator.
Definition: iteratorfacades.hh:501
difference_type DifferenceType
Definition: iteratorfacades.hh:1092
D DifferenceType
The type of the difference between two positions.
Definition: iteratorfacades.hh:325
Generic class for stl-conforming iterators for container classes with operator[]. ...
Definition: genericiterator.hh:151
std::size_t difference_type
Definition: iteratorfacades.hh:148
constexpr DerivedType operator++(int)
Postincrement operator.
Definition: iteratorfacades.hh:351
V Value
The type of value accessed through the iterator.
Definition: iteratorfacades.hh:181
Dune::RandomAccessIteratorFacade< ConstArrayListIterator< IndexPair< TG, TL >, N, std::allocator< Dune::IndexPair< TG, TL > > >, const std::allocator< Dune::IndexPair< TG, TL > > ::value_type, std::allocator< Dune::IndexPair< TG, TL > > ::value_type const &, std::allocator< Dune::IndexPair< TG, TL > > ::difference_type >::iterator_category std::random_access_iterator_tag iterator_category
Definition: iteratorfacades.hh:439
constexpr DerivedType & operator++()
Preincrement operator.
Definition: iteratorfacades.hh:522
constexpr Pointer operator->() const
Definition: iteratorfacades.hh:506
Dune::AutonomousValue< reference > value_type
Definition: iteratorfacades.hh:1463
constexpr DerivedType operator-(DifferenceType n) const
Definition: iteratorfacades.hh:571
typename std::remove_const< T >::type value_type
Definition: iteratorfacades.hh:280
constexpr ProxyType * operator->() noexcept
Definition: iteratorfacades.hh:767
R Reference
The type of the reference to the values accessed.
Definition: iteratorfacades.hh:330
Base class for stl conformant forward iterators.
Definition: iteratorfacades.hh:434
Iterator class for sparse vector-like containers.
Definition: diagonalmatrix.hh:38
An iterator_traits class providing sensible defaults.
Definition: iteratorfacades.hh:1459
D DifferenceType
The type of the difference between two positions.
Definition: iteratorfacades.hh:493
Dune namespace
Definition: alignedallocator.hh:12
constexpr const DerivedIterator & derived() const
Cast of *this to const DerivedIterator type.
Definition: iteratorfacades.hh:1068
Dune::RandomAccessIteratorFacade< ConstArrayListIterator< IndexPair< TG, TL >, N, std::allocator< Dune::IndexPair< TG, TL > > >, const std::allocator< Dune::IndexPair< TG, TL > > ::value_type, std::allocator< Dune::IndexPair< TG, TL > > ::value_type const &, std::allocator< Dune::IndexPair< TG, TL > > ::difference_type >::pointer const std::allocator< Dune::IndexPair< TG, TL > > ::value_type * pointer
Definition: iteratorfacades.hh:442
typename std::remove_const< RemoteIndex >::type value_type
Definition: iteratorfacades.hh:147
std::bidirectional_iterator_tag iterator_category
Definition: iteratorfacades.hh:279
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 DerivedType operator++(int)
Postincrement operator.
Definition: iteratorfacades.hh:217
pointer Pointer
Definition: iteratorfacades.hh:1091
Infrastructure for concepts.
DifferenceType difference_type
Definition: iteratorfacades.hh:1465
This class encapsulates access of IteratorFacade.
Definition: iteratorfacades.hh:785
bigunsignedint< k > operator-(const bigunsignedint< k > &x, std::uintmax_t y)
Definition: bigunsignedint.hh:565
Facade class for stl conformant bidirectional iterators.
Definition: iteratorfacades.hh:274
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:1441
constexpr DerivedIterator operator+(difference_type n) const
Create iterator incremented by given value.
Definition: iteratorfacades.hh:1236
constexpr auto operator!=(const HybridMultiIndex< S... > &lhs, const HybridMultiIndex< T... > &rhs)
Compare two HybridMultiIndexs for inequality.
Definition: hybridmultiindex.hh:441
V * Pointer
The pointer to the Value.
Definition: iteratorfacades.hh:320
IteratorFacade()
Definition: iteratorfacades.hh:1095
constexpr DerivedIterator operator-(difference_type n) const
Create iterator decremented by given value.
Definition: iteratorfacades.hh:1274
constexpr bool operator==(const HybridMultiIndex< S... > &lhs, const HybridMultiIndex< T... > &rhs)
Compare two HybridMultiIndexs for value equality.
Definition: hybridmultiindex.hh:404
value_type Value
Definition: iteratorfacades.hh:1089
constexpr DerivedType & operator++()
Preincrement operator.
Definition: iteratorfacades.hh:210
R Reference
The type of the reference to the values accessed.
Definition: iteratorfacades.hh:196
template which always yields a false value
Definition: typetraits.hh:124
R Reference
The type of the reference to the values accessed.
Definition: iteratorfacades.hh:498
constexpr DerivedType operator++(int)
Postincrement operator.
Definition: iteratorfacades.hh:529
CRTP-Mixing class for stl conformant iterators of given iterator category.
Definition: iteratorfacades.hh:1052
constexpr ProxyArrowResult(const ProxyType &p) noexcept(std::is_nothrow_constructible_v< ProxyType, const ProxyType &>)
Definition: iteratorfacades.hh:757
constexpr DerivedIterator operator--(int)
Postdecrement operator.
Definition: iteratorfacades.hh:1192
void advance(difference_type n)
Definition: arraylist.hh:564
Reference reference
Definition: iteratorfacades.hh:1462
constexpr Pointer operator->() const
Definition: iteratorfacades.hh:204
std::ptrdiff_t difference_type
Definition: iteratorfacades.hh:1086
std::conditional_t< std::is_lvalue_reference_v< reference >, value_type *, Dune::ProxyArrowResult< reference > > pointer
Definition: iteratorfacades.hh:1464
constexpr DerivedType & operator-=(DifferenceType n)
Definition: iteratorfacades.hh:565
Dune::RandomAccessIteratorFacade< ConstArrayListIterator< IndexPair< TG, TL >, N, std::allocator< Dune::IndexPair< TG, TL > > >, const std::allocator< Dune::IndexPair< TG, TL > > ::value_type, std::allocator< Dune::IndexPair< TG, TL > > ::value_type const &, std::allocator< Dune::IndexPair< TG, TL > > ::difference_type >::value_type typename std::remove_const< const std::allocator< Dune::IndexPair< TG, TL > > ::value_type >::type value_type
Definition: iteratorfacades.hh:440
constexpr Reference operator*() const
Dereferencing operator.
Definition: iteratorfacades.hh:199
constexpr ProxyArrowResult(ProxyType &&p) noexcept(std::is_nothrow_constructible_v< ProxyType, ProxyType &&>)
Definition: iteratorfacades.hh:752
D DifferenceType
The type of the difference between two positions.
Definition: iteratorfacades.hh:191
V * Pointer
The pointer to the Value.
Definition: iteratorfacades.hh:186
typename AutonomousValueType< T >::type AutonomousValue
Type free of internal references that T can be converted to.
Definition: typetraits.hh:566
Dune::RandomAccessIteratorFacade< ConstArrayListIterator< IndexPair< TG, TL >, N, std::allocator< Dune::IndexPair< TG, TL > > >, const std::allocator< Dune::IndexPair< TG, TL > > ::value_type, std::allocator< Dune::IndexPair< TG, TL > > ::value_type const &, std::allocator< Dune::IndexPair< TG, TL > > ::difference_type >::reference std::allocator< Dune::IndexPair< TG, TL > > ::value_type const & reference
Definition: iteratorfacades.hh:443
V Value
The type of value accessed through the iterator.
Definition: iteratorfacades.hh:315
Traits for type conversions and type information.
T * pointer
Definition: iteratorfacades.hh:282
constexpr DerivedType & operator--()
Preincrement operator.
Definition: iteratorfacades.hh:360
constexpr const ProxyType * operator->() const noexcept
Definition: iteratorfacades.hh:762
Namespace for concepts.
Definition: concept.hh:33
std::forward_iterator_tag iterator_category
Definition: iteratorfacades.hh:146
typename std::remove_const< R >::type value_type
Definition: iteratorfacades.hh:1083
R reference
Definition: iteratorfacades.hh:283
IteratorCategory iterator_category
Definition: iteratorfacades.hh:1461
T iterator_category
Definition: iteratorfacades.hh:1082
constexpr DerivedIterator & derived()
Cast of *this to DerivedIterator type.
Definition: iteratorfacades.hh:1074
constexpr DerivedIterator operator++(int)
Postincrement operator.
Definition: iteratorfacades.hh:1156
constexpr DerivedType operator+(DifferenceType n) const
Definition: iteratorfacades.hh:542
constexpr DerivedType & operator--()
Predecrement operator.
Definition: iteratorfacades.hh:551
constexpr reference operator[](difference_type n) const
Dereference element with given offset form this iterator.
Definition: iteratorfacades.hh:1207
T DerivedType
The type of derived iterator.
Definition: iteratorfacades.hh:478
constexpr bool requireConvertible()
Definition: concept.hh:246