#include <slang/util/Iterator.h>
template<typename Derived, bool Contiguous = false>
iterator_facade class
Iterator facade which infers iterator types and functionality.
| Template parameters | |
|---|---|
| Derived | iterator subclass type which implements: |
| Contiguous | true if the derived iterator is contiguous, otherwise false (since it cannot be inferred). |
Input iterator (required):
reference dereference() constvoid increment()
Forward:
bool equals(T|sentinel) const
Bidirectional:
void decrement()
Random access:
difference_type distance_to(T|sized_sentinel) const(can replace equal)void advance(difference_type)(can replace increment/decrement)
Derived classes
-
template<typename U>class slang::syntax::SeparatedSyntaxList::iterator_base
- An iterator that will iterate over just the nodes (and skip the delimiters) in the parent SeparatedSyntaxList.
-
template<typename U>class slang::syntax::SeparatedSyntaxList::iterator_base
- An iterator that will iterate over just the nodes (and skip the delimiters) in the parent SeparatedSyntaxList.
Public functions
- decltype(auto) operator*() const constexpr noexcept(…)
- Dereference operator.
- decltype(auto) operator->() const constexpr noexcept(…)
- Arrow operator.
-
template<detail::equality_comparable<self_type> T>bool f operator==(const self_type& lhs, const T& rhs) constexpr noexcept(…)
- Equality comparison operator, the default overload which requires
Derived::equals(T) const -
template<detail::has_distance_to<self_type> T>bool f operator==(const self_type& lhs, const T& rhs) constexpr noexcept(…)
- Fallback equality comparison operator when
Derived::equals(T) constis not available, butDerived::distance_to(T) constis. -
template<typename T = self_type>self_type& operator++() constexpr noexcept(…)
- Default pre-increment operator, requires
Derived::increment() -
template<typename T = self_type>self_type& operator++() constexpr noexcept(…)
- Fallback pre-increment operator when
Derived::increment()is not available, requiresDerived::advance(1)to be valid. -
template<typename T = self_type>self_type operator++(int) constexpr noexcept(…)
- Post-increment operator, requires
Derived::increment()orDerived::advance(1) -
template<typename T = self_type>self_type& operator--() constexpr noexcept(…)
- Default pre-decrement operator, requires
Derived::decrement() -
template<typename T = self_type>self_type& operator--() constexpr noexcept(…)
- Fallback pre-decrement operator when
Derived::decrement()is not available, requiresDerived::advance(-1)to be valid. -
template<typename T = self_type>self_type operator--(int) constexpr noexcept(…)
- Post-decrement operator, requires
Derived::decrement()orDerived::advance(-1) -
template<typename T = self_type, detail::advance_type_arg<T> D>decltype(auto) operator[](D off) const constexpr noexcept(…)
- Random access operator, requires
Derived::advance()
Friends
-
template<detail::advance_type_arg<self_type> D>self_type& operator+=(self_type& self, D offset) constexpr noexcept(…)
- operator+=, requires
Derived::advance() -
template<detail::advance_type_arg<self_type> D>self_type operator+(self_type left, D off) constexpr noexcept(…)
- operator+, requires
Derived::advance() -
template<detail::advance_type_arg<self_type> D>self_type operator+(D off, self_type right) constexpr noexcept(…)
- operator+, requires
Derived::advance() -
template<detail::advance_type_arg<self_type> D>self_type operator-(self_type left, D off) constexpr noexcept(…)
- operator-, requires
Derived::advance() -
template<detail::advance_type_arg<self_type> D>self_type& operator-=(self_type& left, D off) constexpr noexcept(…)
- operator-=, requires
Derived::advance() -
template<detail::has_distance_to<self_type> T>decltype(auto) operator-(const T& left, const self_type& right) constexpr noexcept(…)
- Distance between two iterators or iterator and sentinel pair, requires
Derived::distance_to() -
template<detail::has_distance_to<self_type> Sentinel>decltype(auto) operator-(const self_type& left, const Sentinel& right) constexpr noexcept(…)
- Distance between an iterator and a sentinel, requires
Derived::distance_to() -
template<detail::has_distance_to<self_type> Sentinel>auto operator<=>(const self_type& left, const Sentinel& right) constexpr noexcept(…)
- Three way comparison operator, requires
Derived::distance_to()
Function documentation
template<typename Derived, bool Contiguous>
decltype(auto) slang:: iterator_facade<Derived, Contiguous>:: operator*() const constexpr noexcept(…)
Dereference operator.
| Returns | decltype(Derived{}.dereference()) |
|---|
template<typename Derived, bool Contiguous>
decltype(auto) slang:: iterator_facade<Derived, Contiguous>:: operator->() const constexpr noexcept(…)
Arrow operator.
| Returns | Pointer or arrow proxy to the return value of Derived::dereference() const |
|---|