FreeBSD Manual Pages
std::ranges...er_iterator(3) C++ Standard Libary std::ranges...er_iterator(3) NAME std::ranges::lazy_split_view::outer_iterator - std::ranges::lazy_split_view::outer_iterator Synopsis template< bool Const > (since C++20) struct /* outer_iterator */; (exposition only*) The return type of lazy_split_view::begin, and of lazy_split_view::end when the underlying view is a common_range and forward_range. If either V or Pattern is not a simple view (e.g. if ranges::itera- tor_t<const V> is invalid or different from ranges::iterator_t<V>), Const is true for iterators returned from the const overloads, and false otherwise. If V is a simple view, Const is true if and only if V is a forward_range. Member types Member type Definition const ranges::lazy_split_view if Const is true, otherwise Parent ranges::lazy_split_view (exposition-only member type*) Base const V if Const is true, otherwise V (exposition-only member type*) iterator_concept (C++20) std::forward_iterator_tag if Base models forward_range, otherwise std::input_iterator_tag iterator_category (C++20) std::input_iterator_tag if Base models forward_range. Not present otherwise. value_type (C++20) ranges::lazy_iterator_view<V, Pattern> ::/* outer_iterator */<Const>::value_type difference_type (C++20) ranges::range_difference_t<Base>. Data members Member name Definition A pointer of type Parent* to the parent lazy_split_view parent_ (private) object (exposition-only member object*) An iterator of type ranges::itera- tor_t<Base> into the current_ (private) underlying view; present only if V models forward_range (exposition-only member object*) A boolean flag that indicates whether an empty trailing trailing_empty_ (private) subrange (if any) was reached (exposition-only member object*) Member functions constructor constructs an iterator (C++20) (public member function) operator* returns the current subrange (C++20) (public member function) operator++ advances the iterator operator++(int) (public member function) (C++20) cur returns conditionally a reference to the current_ (if present) or to (C++20) the *parent_->current_ (exposition-only member function*) Member functions std::ranges::lazy_split_view::outer_iterator::outer_iterator /* outer_iterator */() = default; (1) (since C++20) constexpr explicit /* outer_iterator */( Parent& parent ) (2) (since C++20) requires (!ranges::forward_range<Base>); constexpr /* outer_iterator */( Parent& parent, ranges::iterator_t<Base> current ) (3) (since C++20) requires ranges::forward_range<Base>; constexpr /* outer_iterator */( /* outer_iterator */<!Const> i ) requires Const && std::convertible_to<ranges::iterator_t<V>, (4) (since C++20) ranges::iterator_t<Base>>; 1) Value initializes the non-static data members with their default member initializer, that is: * parent_ = nullptr;, * current_ = iterator_t<Base>(); (present only if V models for- ward_range), 2) Initializes parent_ with std::addressof(parent). 3) Initializes parent_ with std::addressof(parent) and current_ with std::move(current). 4) Initializes parent_ with i.parent_, current_ with std::move(i.current_), and trailing_empty_ with t.trailing_empty_. The trailing_empty_ is initialized with its default member initial- izer to false. std::ranges::lazy_split_view::outer_iterator::operator* constexpr value_type operator*() const; (since C++20) Equivalent to return value_type{*this};. std::ranges::lazy_split_view::outer_iterator::operator++ constexpr /* outer_iterator */& operator++(); (1) (since C++20) constexpr decltype(auto) operator++(int); (2) (since C++20) 1) The function body is equivalent to const auto end = ranges::end(parent_->base_); if (/* cur */() == end) { trailing_empty_ = false; return *this; } const auto [pbegin, pend] = ranges::subrange{parent_->pattern_}; if (pbegin == pend) ++/* cur */(); else if constexpr (/* tiny_range */<Pattern>) { /* cur */() = ranges::find(std::move(/* cur */()), end, *pbegin); if (/* cur */() != end) { ++/* cur */(); if (/* cur */() == end) trailing_empty_ = true; } } else { do { auto [b, p] = ranges::mismatch(/* cur */(), end, pbegin, pend); if (p == pend) { /* cur */() = b; if (/* cur */() == end) trailing_empty_ = true; break; // The pattern matched; skip it } } while (++/* cur */() != end); } return *this; 2) Equivalent to if constexpr (ranges::forward_range<Base>) { auto tmp = *this; ++*this; return tmp; } else { ++*this; // no return statement } std::ranges::lazy_split_view::outer_iterator::cur() constexpr auto& /* cur */() noexcept; (1) (since C++20) (exposition only*) constexpr auto& /* cur */() const noexcept; (2) (since C++20) (exposition only*) This convenience member function is referred to from /* outer_itera- tor */::operator++(), from the non-member operator==(const /* outer_it- erator */&, std::default_sentinel_t), and from some member functions of the pos- sible implementation of inner_iterator. 1,2) Equivalent to if constexpr (ranges::forward_range<V>) return current_; else return *parent->current_; Non-member functions operator== compares the underlying iterators or the underlying iter- ator and (C++20) std::default_sentinel (function) operator==(std::ranges::split_view::outer_iterator) friend constexpr bool operator==( const /* outer_iterator */& x, const /* outer_iterator */& y ) (1) (since C++20) requires forward_range<Base>; friend constexpr bool operator==( const /* outer_iterator */& x, (2) (since C++20) std::default_sentinel_t ); 1) Equivalent to return x.current_ == y.current_ and x.trail- ing_empty_ == y.trailing_empty_;. 2) Equivalent to return x./* cur */() == ranges::end(x.par- ent_->base_) and !x.trailing_empty_;. The != operator is synthesized from operator==. These functions are not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::ranges::split_view::outer_iterator is an associated class of the arguments. Nested classes value_type the value type of the outer_iterator (C++20) (public member class) Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior LWG 3904 C++20 trailing_empty_ was not initialized in initialized constructor overload (4) http://cppreference.com 2024.06.10 std::ranges...er_iterator(3)
NAME | Synopsis | Member types | Member functions | Member functions | Non-member functions
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::lazy_split_view::outer_iterator&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
