5 #ifndef VCCC_RANGES_VIEWS_REVERSE_HPP
6 #define VCCC_RANGES_VIEWS_REVERSE_HPP
27 using vccc::detail::return_category;
31 struct is_reverse_subrange : return_category<0> {};
32 template<
typename I, subrange_kind K>
33 struct is_reverse_subrange<
subrange<
std::reverse_iterator<I>, std::reverse_iterator<I>, K>>
34 : return_category<2, subrange<I, I, K>> {};
37 using reverse_tag = std::conditional_t<
39 is_reverse_subrange<remove_cvref_t<R>>
43 constexpr
auto call(R&& r, return_category<1>)
const {
44 return std::forward<decltype(std::forward<R>(r).base())>(std::forward<R>(r).base());
47 template<
typename R,
typename I>
52 template<
typename R,
typename I>
58 constexpr
auto call(R&& r, return_category<0>)
const {
65 return call(std::forward<R>(r), reverse_tag<R>{});
A range adaptor that represents a view of underlying view with reversed order.
Definition: reverse_view.hpp:60
Definition: subrange.hpp:151
Definition: reverse.hpp:29
constexpr auto operator()(R &&r) const
Definition: reverse.hpp:64
constexpr VCCC_INLINE_OR_STATIC detail::reverse_adaptor_object reverse
Definition: reverse.hpp:74
#define VCCC_INLINE_OR_STATIC
Definition: inline_or_static.hpp:9
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: is_specialization.hpp:30
helper base class template for defining a range adaptor closure object
Definition: range_adaptor_closure.hpp:96