Range-v3
Range algorithms, views, and actions for the Standard Library
ranges::view_facade< Derived, Cardinality > Struct Template Reference

A utility for constructing a view from a (derived) type that implements begin and end cursors. More...

#include <range/v3/view/facade.hpp>

+ Inheritance diagram for ranges::view_facade< Derived, Cardinality >:

Classes

struct  view_as_cursor
 

Public Member Functions

template<typename D = Derived>
requires same_as<D, Derived>
constexpr auto begin () -> detail::facade_iterator_t< D >
 Let d be static_cast<Derived &>(*this). Let b be std::as_const(d).begin_cursor() if that expression is well-formed; otherwise, let b be d.begin_cursor(). Let B be the type of b. More...
 
template<typename D = Derived>
requires same_as<D, Derived>
constexpr auto begin () const -> detail::facade_iterator_t< D const >
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename D = Derived>
requires same_as<D, Derived>
constexpr auto end () -> detail::facade_sentinel_t< D >
 Let d be static_cast<Derived &>(*this). Let e be std::as_const(d).end_cursor() if that expression is well-formed; otherwise, let e be d.end_cursor(). Let E be the type of e. More...
 
template<typename D = Derived>
requires same_as<D, Derived>
constexpr auto end () const -> detail::facade_sentinel_t< D const >
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
- Public Member Functions inherited from ranges::view_interface< Derived, Cardinality >
constexpr auto empty () const noexcept -> bool
 Test whether a range can be empty:
 
template<bool True = true>
requires True
&&!detail ::has_fixed_size_< Cardinality > &&forward_range< D< True > const > constexpr bool empty () const noexcept(noexcept(bool(ranges::begin(std::declval< D< True > const & >())==ranges::end(std::declval< D< True > const & >()))))
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<bool True = true>
requires True
&&Cardinality< 0) &&(Cardinality !=infinite) &&(!forward_range< D< True > >) &&sized_range< D< True > > constexpr bool empty() noexcept(noexcept(bool(ranges::size(std::declval< D< True > & >())==0))) { return ranges::size(derived())==0;} template< bool True=true > &&Cardinality< 0) &&(Cardinality !=infinite) &&(!forward_range< D< True > const >) &&sized_range< D< True > const > constexpr bool empty() const noexcept(noexcept(bool(ranges::size(std::declval< D< True > const & >())==0))) { return ranges::size(derived())==0;} template< bool True=true > &&!detail ::has_fixed_size_< Cardinality > &&forward_range< D< True > > constexpr bool empty () noexcept(noexcept(bool(ranges::begin(std::declval< D< True > & >())==ranges::end(std::declval< D< True > & >()))))
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<bool True = true>
requires True
&&detail::can_empty_< D< True > const > constexpr operator bool () const noexcept(noexcept(ranges::empty(std::declval< D< True > const & >())))
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<bool True = true>
requires True
&&detail::can_empty_< D< True > > constexpr operator bool () noexcept(noexcept(ranges::empty(std::declval< D< True > & >())))
 
view_interfaceoperator= (view_interface &&)=default
 
view_interfaceoperator= (view_interface const &)=default
 
 view_interface (view_interface &&)=default
 
 view_interface (view_interface const &)=default
 

Protected Member Functions

constexpr view_as_cursor begin_cursor () const
 
constexpr default_sentinel_t end_cursor () const
 
- Protected Member Functions inherited from ranges::view_interface< Derived, Cardinality >
constexpr Derived const & derived () const noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
constexpr Derivedderived () noexcept
 

Protected Attributes

friend range_access
 

Additional Inherited Members

- Protected Types inherited from ranges::view_interface< Derived, Cardinality >
template<bool B>
using D = meta::invoke< detail::dependent_< B >, Derived >
 

Detailed Description

template<typename Derived, cardinality Cardinality>
struct ranges::view_facade< Derived, Cardinality >

A utility for constructing a view from a (derived) type that implements begin and end cursors.

Template Parameters
DerivedA type that derives from view_facade and implements begin and end cursors. This type is permitted to be incomplete.
CardinalityThe cardinality of this view: finite, infinite, or unknown. See ranges::cardinality.

Member Function Documentation

◆ begin()

template<typename Derived , cardinality Cardinality>
template<typename D = Derived>
requires same_as<D, Derived>
constexpr auto ranges::view_facade< Derived, Cardinality >::begin ( ) -> detail::facade_iterator_t<D>
constexpr

Let d be static_cast<Derived &>(*this). Let b be std::as_const(d).begin_cursor() if that expression is well-formed; otherwise, let b be d.begin_cursor(). Let B be the type of b.

Returns
ranges::basic_iterator<B>(b)

◆ end()

template<typename Derived , cardinality Cardinality>
template<typename D = Derived>
requires same_as<D, Derived>
constexpr auto ranges::view_facade< Derived, Cardinality >::end ( ) -> detail::facade_sentinel_t<D>
constexpr

Let d be static_cast<Derived &>(*this). Let e be std::as_const(d).end_cursor() if that expression is well-formed; otherwise, let e be d.end_cursor(). Let E be the type of e.

Returns
ranges::basic_iterator<E>(e) if E is the same as B computed above for begin(); otherwise, return e.