14template<concepts::ForwardContainer View, concepts::ForwardContainer Pattern>
16 concepts::View<View> && concepts::View<Pattern> &&
20 friend struct Sentinel;
21 friend struct Iterator;
25 struct Iterator :
public IteratorBase<Iterator, ForwardIteratorTag, Value, meta::ContainerSSizeType<View>> {
32 constexpr auto base()
const {
return m_base; }
34 constexpr auto operator*() const -> Value {
38 constexpr void advance_one() {
39 m_base = container::begin(m_next);
40 if (m_base != container::end(m_parent->m_base)) {
41 m_base = container::end(m_next);
42 if (m_base == container::end(m_parent->m_base)) {
43 m_trailing_empty =
true;
44 m_next = container::reconstruct(in_place_type<View>, m_base, m_base);
46 m_next = m_parent->find_next(m_base);
49 m_trailing_empty =
false;
54 friend struct Sentinel;
56 constexpr friend auto operator==(Iterator
const& a, Iterator
const& b) ->
bool {
57 return a.m_base == b.m_base && a.m_trailing_empty == b.m_trailing_empty;
61 meta::ContainerIterator<View> m_base;
63 bool m_trailing_empty {
false };
70 constexpr explicit Sentinel(SplitView& parent) : m_base(container::
end(parent.m_base)) {}
73 constexpr friend auto operator==(Iterator
const& a, Sentinel
const& b) ->
bool {
74 return a.m_base == b.m_base && !a.m_trailing_empty;
77 meta::ContainerSentinel<View> m_base;
87 template<concepts::InputContainer Con>
98 constexpr auto base() && ->
View {
return util::move(m_base); }
100 constexpr auto begin() -> Iterator {
101 if (!m_cached_begin) {
113 return Sentinel { *
this };
129 Optional<Value> m_cached_begin;
132template<
typename Con,
typename Pattern>
135template<concepts::InputContainer Con>
Definition single_view.h:15
Definition split_view.h:18
constexpr SplitView(Con &&container, meta::ContainerValue< Con > value)
Definition split_view.h:90
constexpr SplitView(View base, Pattern pattern)
Definition split_view.h:85
constexpr auto end()
Definition split_view.h:107
constexpr auto begin() -> Iterator
Definition split_view.h:100
constexpr auto base() &&-> View
Definition split_view.h:98
constexpr auto base() const &-> View requires(concepts::CopyConstructible< View >)
Definition split_view.h:93
Definition view_interface.h:26
Definition common_container.h:10
Definition operations.h:11
Definition operations.h:27
constexpr auto operator==(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b) -> bool
Definition duration.h:108
Definition any_storable.h:9
constexpr auto next
Definition next.h:35
constexpr auto empty
Definition empty.h:45
constexpr auto reconstruct
Definition reconstruct.h:75
constexpr auto move
Definition move.h:38
constexpr auto search
Definition search.h:36
View(Iter, Sent) -> View< Iter, Sent >
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
SplitView(Con &&, Pattern &&) -> SplitView< meta::AsView< Con >, meta::AsView< Pattern > >
constexpr auto in_place_type
Definition in_place_type.h:12
constexpr auto end
Definition end.h:47
Definition iterator_base.h:14