13#ifndef RANGES_V3_VIEW_FACADE_HPP
14#define RANGES_V3_VIEW_FACADE_HPP
30#include <range/v3/detail/prologue.hpp>
37 template<
typename Derived>
38 using begin_cursor_t = detail::decay_t<
decltype(
39 range_access::begin_cursor(std::declval<Derived &>()))>;
41 template<
typename Derived>
42 using end_cursor_t = detail::decay_t<
decltype(
43 range_access::end_cursor(std::declval<Derived &>()))>;
45 template<
typename Derived>
46 using facade_iterator_t = basic_iterator<begin_cursor_t<Derived>>;
48 template<
typename Derived>
49 using facade_sentinel_t =
50 meta::if_c<same_as<begin_cursor_t<Derived>, end_cursor_t<Derived>>,
51 facade_iterator_t<Derived>, end_cursor_t<Derived>>;
64 template<
typename Derived, cardinality Cardinality>
75 explicit operator bool() =
delete;
76 explicit operator bool()
const =
delete;
83 constexpr default_sentinel_t end_cursor()
const
94 template(
typename D = Derived)(
95 requires same_as<D, Derived>)
96 constexpr auto begin() -> detail::facade_iterator_t<D>
98 return detail::facade_iterator_t<D>{
99 range_access::begin_cursor(*
static_cast<Derived *
>(
this))};
102 template(
typename D = Derived)(
103 requires same_as<D, Derived>)
104 constexpr auto begin() const -> detail::facade_iterator_t<D const>
106 return detail::facade_iterator_t<D const>{
107 range_access::begin_cursor(*
static_cast<Derived
const *
>(
this))};
115 template(
typename D = Derived)(
116 requires same_as<D, Derived>)
117 constexpr auto end() -> detail::facade_sentinel_t<D>
119 return static_cast<detail::facade_sentinel_t<D>
>(
120 range_access::end_cursor(*
static_cast<Derived *
>(
this)));
123 template(
typename D = Derived)(
124 requires same_as<D, Derived>)
125 constexpr auto end() const -> detail::facade_sentinel_t<D const>
127 return static_cast<detail::facade_sentinel_t<D const>
>(
128 range_access::end_cursor(*
static_cast<Derived
const *
>(
this)));
135#include <range/v3/detail/epilogue.hpp>
A utility for constructing a view from a (derived) type that implements begin and end cursors.
Definition facade.hpp:66
Definition interface.hpp:129