[range.split.iterator] (original) (raw)
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.17 Split view [range.split]
25.7.17.3 Class split_view::iterator [range.split.iterator]
namespace std::ranges { template<forward_range V, forward_range Pattern> requires view<V> && view<Pattern> && indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> class split_view<V, Pattern>::iterator { private: split_view* parent_ = nullptr; iterator_t<V> cur_ = iterator_t<V>(); subrange<iterator_t<V>> next_ = subrange<iterator_t<V>>(); bool trailing_empty_ = false; public: using iterator_concept = forward_iterator_tag;using iterator_category = input_iterator_tag;using value_type = subrange<iterator_t<V>>;using difference_type = range_difference_t<V>;iterator() = default;constexpr iterator(split_view& parent, iterator_t<V> current, subrange<iterator_t<V>> next);constexpr iterator_t<V> base() const;constexpr value_type operator*() const;constexpr iterator& operator++();constexpr iterator operator++(int);friend constexpr bool operator==(const iterator& x, const iterator& y);};}
constexpr _iterator_(split_view& parent, iterator_t<V> current, subrange<iterator_t<V>> next);
Effects: Initializes parent_ with addressof(parent),cur_ with std::move(current), and_next__ with std::move(next).
constexpr iterator_t<V> base() const;
Effects: Equivalent to: return cur_;
constexpr value_type operator*() const;
Effects: Equivalent to: return {cur_, next_.begin()};
constexpr _iterator_& operator++();
Effects: Equivalent to:cur_ = next_.begin();if (cur_ != ranges::end(_parent__->base_)) { cur_ = next_.end();if (cur_ == ranges::end(_parent__->base_)) { trailing_empty_ = true;next_ = {cur_, cur_};} else { next_ = _parent__->find-next(cur_);} } else { trailing_empty_ = false;} return *this;
constexpr _iterator_ operator++(int);
Effects: Equivalent to:auto tmp = *this;++*this;return tmp;
friend constexpr bool operator==(const _iterator_& x, const _iterator_& y);
Effects: Equivalent to:return x.cur_ == y.cur_ && x.trailing_empty_ == y.trailing_empty_;