17 #ifndef OPENKALMAN_COMPATIBILITY_VIEWS_REVERSE_HPP 18 #define OPENKALMAN_COMPATIBILITY_VIEWS_REVERSE_HPP 20 #include <type_traits> 28 #ifdef __cpp_lib_ranges 29 using std::ranges::reverse_view;
32 using std::ranges::views::reverse;
41 template<
bool Enable = true, std::enable_if_t<Enable and stdex::default_initializable<V>,
int> = 0>
47 template<
bool Enable = true, std::enable_if_t<Enable and stdex::copy_constructible<V>,
int> = 0>
48 constexpr V base()
const& {
return base_; }
50 constexpr V base() && {
return std::move(base_); }
53 template<
bool Enable = true, std::enable_if_t<Enable and not stdex::ranges::common_range<V>,
int> = 0>
54 constexpr std::reverse_iterator<stdex::ranges::iterator_t<V>>
56 {
return std::make_reverse_iterator(stdex::ranges::next(stdex::ranges::begin(base_), stdex::ranges::end(base_))); }
58 template<
bool Enable = true, std::enable_if_t<Enable and stdex::ranges::common_range<V>,
int> = 0>
59 constexpr std::reverse_iterator<stdex::ranges::iterator_t<V>>
60 begin() {
return std::make_reverse_iterator(stdex::ranges::end(base_)); }
62 template<
bool Enable = true, std::enable_if_t<Enable and stdex::ranges::common_range<const V>,
int> = 0>
64 begin()
const {
return std::make_reverse_iterator(stdex::ranges::end(base_)); }
67 constexpr std::reverse_iterator<stdex::ranges::iterator_t<V>>
68 end() {
return std::make_reverse_iterator(stdex::ranges::begin(base_)); }
70 template<
bool Enable = true, std::enable_if_t<Enable and stdex::ranges::common_range<const V>,
int> = 0>
72 end()
const {
return std::make_reverse_iterator(stdex::ranges::begin(base_)); }
75 template<
bool Enable = true, std::enable_if_t<Enable and stdex::ranges::sized_range<const V>,
int> = 0>
79 template<
bool Enable = true, std::enable_if_t<Enable and stdex::ranges::sized_range<const V>,
int> = 0>
97 constexpr
bool enable_borrowed_range<reverse_view<T>> = enable_borrowed_range<T>;
106 template<
typename R, std::enable_if_t<viewable_range<R>,
int> = 0>
108 operator() [[nodiscard]] (R&& r)
const 126 return std::move(r).base();
Equivalent to std::ranges::reverse_view.
Definition: reverse.hpp:39
constexpr detail::all_closure all
Equivalent to std::ranges::views::all.
Definition: all.hpp:64
Definition: view_interface.hpp:32
constexpr detail::reverse_closure reverse
a RangeAdapterObject associated with reverse_view.
Definition: reverse.hpp:140
Definition: common.hpp:200
constexpr bool size
T is either an index representing a size, or unbounded_size_t, which indicates that the size is unbou...
Definition: size.hpp:65
Definition: range_adaptor_closure.hpp:34
Definition: reverse.hpp:104