28template<concepts::ForwardContainer View>
34 template<
bool is_const>
37 template<
bool is_const>
40 template<
bool is_const>
43 template<
bool is_const>
46 template<
bool is_const>
52 template<
bool is_const>
55 meta::Conditional<concepts::RandomAccessIterator<Iter<is_const>>, RandomAccessIteratorTag,
56 meta::Conditional<concepts::BidirectionalIterator<Iter<is_const>>,
57 BidirectionalIteratorTag, ForwardIteratorTag>>,
58 ValueType<is_const>, SSizeType<is_const>> {
60 constexpr Iterator(Iter<is_const> current, SSizeType<is_const>
window_size)
62 : m_current(util::move(current)), m_window_size(
window_size) {}
64 constexpr Iterator(Iter<is_const> current, Iter<is_const> last_element, SSizeType<is_const>
window_size)
66 : m_current(util::move(current)), m_last_element(util::move(last_element)), m_window_size(
window_size) {}
71 constexpr Iterator(Iterator<!is_const> other)
73 : m_current(util::move(other.m_current)), m_window_size(other.m_window_size) {}
75 constexpr auto operator*()
const {
84 constexpr void advance_one() {
86 ++m_last_element.value;
91 constexpr void back_one()
95 --m_last_element.value;
100 constexpr void advance_n(SSizeType<is_const> n)
104 m_last_element.value += n;
111 friend class Iterator;
113 friend class Sentinel;
117 constexpr friend auto operator==(Iterator
const& a, Iterator
const& b) ->
bool {
119 return a.m_last_element.
value == b.m_last_element.
value;
121 return a.m_current == b.m_current;
125 constexpr friend auto operator<=>(Iterator
const& a, Iterator
const& b)
128 return a.m_current <=> b.m_current;
131 constexpr friend auto operator-(Iterator
const& a, Iterator
const& b)
135 return a.m_last_element.
value - b.m_last_element.
value;
137 return a.m_current - b.m_current;
141 Iter<is_const> m_current {};
143 SSizeType<is_const> m_window_size { 0 };
148 constexpr explicit Sentinel(Sent<false>
base) : m_base(
base) {}
151 Sentinel() =
default;
153 constexpr auto equals(Iterator<false>
const& other) ->
bool {
return m_base == other.m_last_element; }
155 constexpr auto difference(Iterator<false>
const& other)
158 return m_base - other.m_last_element;
182 constexpr auto base() && ->
View {
return util::move(m_base); }
190 if (!m_begin_cache.value) {
191 m_begin_cache.value.emplace(Iterator<false>(
196 return m_begin_cache.value.value();
203 requires(
detail::SlideCachesNothing<
View const>)
214 if (!m_end_cache.value) {
215 m_end_cache.value.emplace(Iterator<false>(
219 return m_end_cache.value.value();
227 constexpr auto end() const
228 requires(
detail::SlideCachesNothing<
View const>)
230 return begin() + SSizeType<true>(
size());
255 SSizeType<false> m_window_size {};
262template<
typename Con>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition sentinel_base.h:13
Definition slide_view.h:32
constexpr auto size()
Definition slide_view.h:233
constexpr auto end() const
Definition slide_view.h:227
constexpr auto size() const
Definition slide_view.h:243
constexpr auto end()
Definition slide_view.h:208
constexpr auto window_size() const
Definition slide_view.h:184
constexpr auto base() const &-> View requires(concepts::CopyConstructible< View >)
Definition slide_view.h:177
constexpr auto base() &&-> View
Definition slide_view.h:182
constexpr SlideView(View base, SSizeType< false > window_size)
Definition slide_view.h:172
constexpr auto begin()
Definition slide_view.h:186
constexpr auto begin() const
Definition slide_view.h:202
Definition view_interface.h:26
Definition bidirectional_container.h:8
Definition bidirectional_iterator.h:8
Definition common_container.h:10
Definition operations.h:99
Definition operations.h:27
Definition random_access_container.h:8
Definition random_access_iterator.h:12
Definition simple_view.h:11
Definition sized_container.h:8
Definition sized_sentinel_for.h:9
Definition slide_view.h:25
Definition slide_view.h:21
Definition slide_view.h:18
Definition any_storable.h:9
constexpr auto prev
Definition prev.h:28
constexpr auto next
Definition next.h:35
constexpr auto operator<=>(MoveIterator< Iter > const &a, MoveIterator< U > const &b)
Definition move_iterator.h:90
constexpr auto operator-(MoveIterator< Iter > const &a, MoveIterator< U > const &b) -> decltype(a.base() - b.base())
Definition move_iterator.h:95
SlideView(Con &&, meta::ContainerSSizeType< Con >) -> SlideView< meta::AsView< Con > >
constexpr auto reconstruct
Definition reconstruct.h:75
constexpr auto move
Definition move.h:38
constexpr auto operator==(MoveIterator< Iter > const &a, MoveIterator< U > const &b) -> bool
Definition move_iterator.h:85
constexpr auto distance
Definition distance.h:44
constexpr auto size
Definition size.h:54
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
constexpr auto to_unsigned
Definition to_unsigned.h:16
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
constexpr auto in_place_type
Definition in_place_type.h:12
Definition enable_borrowed_container.h:9
Definition iterator_base.h:14
T value
Definition store_if.h:8