5 #ifndef VCCC_RANGES_VIEWS_REVERSE_VIEW_HPP
6 #define VCCC_RANGES_VIEWS_REVERSE_VIEW_HPP
29 struct reverse_view_cached_begin {
30 constexpr std::reverse_iterator<iterator_t<V>>
begin(V& base) {
31 return std::make_reverse_iterator(
ranges::end(base));
36 struct reverse_view_cached_begin<V, false> {
37 constexpr std::reverse_iterator<iterator_t<V>>
begin(V& base) {
38 if (!cached_begin_.has_value()) {
41 return cached_begin_.value();
44 non_propagating_cache<std::reverse_iterator<iterator_t<V>>> cached_begin_;
59 ,
private detail::reverse_view_cached_begin<V>
61 using cache_begin_base = detail::reverse_view_cached_begin<V>;
69 : base_(
std::move(r)) {}
72 constexpr V
base() const& {
77 return std::move(base_);
80 constexpr std::reverse_iterator<iterator_t<V>>
begin() {
86 return std::make_reverse_iterator(
ranges::end(base_));
89 constexpr std::reverse_iterator<iterator_t<V>>
end() {
94 constexpr
auto end()
const {
112 #if __cplusplus >= 201703L
115 reverse_view(R&&) -> reverse_view<views::all_t<R>>;
A range adaptor that represents a view of underlying view with reversed order.
Definition: reverse_view.hpp:60
constexpr V base() const &
Definition: reverse_view.hpp:72
constexpr auto size() const
Definition: reverse_view.hpp:104
constexpr auto size()
Definition: reverse_view.hpp:99
constexpr V base() &&
Definition: reverse_view.hpp:76
constexpr reverse_view(V r)
Definition: reverse_view.hpp:68
constexpr auto end() const
Definition: reverse_view.hpp:94
constexpr std::reverse_iterator< iterator_t< V > > begin()
Definition: reverse_view.hpp:80
constexpr auto begin() const
Definition: reverse_view.hpp:85
constexpr std::reverse_iterator< iterator_t< V > > end()
Definition: reverse_view.hpp:89
helper class template for defining a view, using the curiously recurring template pattern
Definition: view_interface.hpp:78
constexpr VCCC_INLINE_OR_STATIC detail::next_niebloid next
Definition: next.hpp:65
constexpr reverse_view< views::all_t< R > > make_reverse_view(R &&r)
Definition: reverse_view.hpp:120
constexpr VCCC_INLINE_OR_STATIC detail::begin_niebloid begin
returns an iterator to the beginning of a range
Definition: begin.hpp:116
constexpr VCCC_INLINE_OR_STATIC detail::size_niebloid size
returns the size of a container or array
Definition: size.hpp:145
constexpr VCCC_INLINE_OR_STATIC detail::end_niebloid end
returns a sentinel indicating the end of a range
Definition: end.hpp:120
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
specifies a range whose iterator type satisfies bidirectional_iterator
Definition: bidirectional_range.hpp:49
Definition: enable_borrowed_range.hpp:17
specifies that a range is a view, that is, it has constant time copy/move/assignment
Definition: view.hpp:31