29template<concepts::Iterator Iter, concepts::SentinelFor<Iter> Sent = Iter,
30 bool is_sized = concepts::SizedSentinelFor<Sent, Iter>>
31requires(is_sized || !concepts::SizedSentinelFor<Sent, Iter>)
35 , public
util::AddMemberGet<
View<Iter, Sent, is_sized>> {
49 : m_iterator(
util::
move(iterator)), m_sentinel(
di::
move(sentinel)) {}
53 : m_iterator(
util::
move(iterator)), m_sentinel(sentinel), m_size(
size) {}
55 template<
typename Cont>
62 if constexpr (store_size) {
67 template<concepts::BorrowedContainer Cont>
74 constexpr auto begin() const -> Iter
80 [[nodiscard]]
constexpr auto begin() -> Iter
83 return util::move(m_iterator);
86 constexpr auto end() const -> Sent {
return m_sentinel; }
88 constexpr auto empty() const ->
bool {
return m_iterator == m_sentinel; }
90 constexpr auto size() const -> SizeType
93 if constexpr (store_size) {
96 return m_sentinel - m_iterator;
105 [[nodiscard]]
constexpr auto prev(SSizeType n = 1) const ->
View
106 requires(
concepts::BidirectionalIterator<Iter>)
113 [[nodiscard]]
constexpr auto next(SSizeType n = 1) const& ->
View
114 requires(
concepts::ForwardIterator<Iter>)
121 [[nodiscard]]
constexpr auto next(SSizeType n = 1) && ->
View {
123 return util::move(*
this);
141 template<concepts::DecaySameAs<View> Self>
147 template<concepts::DecaySameAs<View> Self>
153 template<concepts::DecaySameAs<View> Self,
typename T>
169template<concepts::Iterator Iter, concepts::SentinelFor<Iter> Sent>
172template<concepts::Iterator Iter, concepts::SentinelFor<Iter> Sent>
175template<concepts::BorrowedContainer Cont>
180template<concepts::BorrowedContainer Cont>
Definition view_interface.h:26
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_element >, types::InPlaceType< View >, Constexpr< 0ZU >) -> InPlaceType< Iter >
Definition view.h:127
constexpr View(concepts::ConvertibleToNonSlicing< Iter > auto iterator, Sent sentinel, SizeType size)
Definition view.h:51
constexpr View(concepts::ConvertibleToNonSlicing< Iter > auto iterator, Sent sentinel)
Definition view.h:47
constexpr auto empty() const -> bool
Definition view.h:88
constexpr auto next(SSizeType n=1) const &-> View requires(concepts::ForwardIterator< Iter >)
Definition view.h:113
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, Constexpr< 0ZU >, Self &&self) -> meta::Like< Self, Iter >
Definition view.h:142
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, Constexpr< 1ZU >, Self &&self) -> meta::Like< Self, Sent >
Definition view.h:148
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_element >, types::InPlaceType< View const >, Constexpr< 1ZU >) -> InPlaceType< Sent const >
Definition view.h:134
constexpr auto next(SSizeType n=1) &&-> View
Definition view.h:121
constexpr auto end() const -> Sent
Definition view.h:86
constexpr auto size() const -> SizeType requires(is_sized)
Definition view.h:90
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_element >, types::InPlaceType< View const >, Constexpr< 0ZU >) -> InPlaceType< Iter const >
Definition view.h:132
constexpr View(Cont &&container)
Definition view.h:59
constexpr auto advance(SSizeType n) -> View &
Definition view.h:100
constexpr auto begin() -> Iter requires(!concepts::Copyable< Iter >)
Definition view.h:80
constexpr auto begin() const -> Iter requires(concepts::Copyable< Iter >)
Definition view.h:74
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, types::InPlaceType< T >, Self &&self) -> decltype(auto)
Definition view.h:155
constexpr View(Cont &&container, SizeType size)
Definition view.h:70
constexpr auto prev(SSizeType n=1) const -> View requires(concepts::BidirectionalIterator< Iter >)
Definition view.h:105
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_element >, types::InPlaceType< View >, Constexpr< 1ZU >) -> InPlaceType< Sent >
Definition view.h:129
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_size >, types::InPlaceType< View >) -> types::size_t
Definition view.h:137
Definition borrowed_container.h:8
This concept requires that the conversion from From to To would not result in converting a derived ty...
Definition operations.h:108
Definition operations.h:99
Definition operations.h:40
Definition operations.h:27
Definition sized_container.h:8
Definition sized_sentinel_for.h:9
Definition any_storable.h:9
constexpr auto move
Definition move.h:38
View(Iter, Sent) -> View< Iter, Sent >
constexpr auto size
Definition size.h:54
constexpr auto advance
Definition advance.h:62
std::size_t size_t
Definition size_t.h:12
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
constexpr auto forward_like(U &&value) -> decltype(auto)
Definition forward_like.h:8
Definition zstring_parser.h:9
Definition enable_borrowed_container.h:9
Definition in_place_type.h:5