13#ifndef RANGES_V3_EXPERIMENTAL_VIEW_SHARED_HPP
14#define RANGES_V3_EXPERIMENTAL_VIEW_SHARED_HPP
27#include <range/v3/detail/prologue.hpp>
33 namespace experimental
35 template<
typename Rng>
37 : view_interface<shared_view<Rng>, range_cardinality<Rng>::value>
41 std::shared_ptr<Rng> rng_ptr_;
44 shared_view() =
default;
47 explicit shared_view(Rng rng)
48 : rng_ptr_{std::make_shared<Rng>(std::move(rng))}
54 return ranges::begin(*rng_ptr_);
56 sentinel_t<Rng> end()
const
58 return ranges::end(*rng_ptr_);
62 auto CPP_fun(size)()(
const
65 return ranges::size(*rng_ptr_);
69 template<
typename SharedFn>
72 struct RANGES_STRUCT_WITH_ADL_BARRIER(shared_closure_base)
75 template(
typename Rng,
typename SharedFn)(
77 constructible_from<detail::decay_t<Rng>, Rng>)
80 return static_cast<SharedFn &&
>(vw)(
static_cast<Rng &&
>(rng));
83 template<
typename SharedFn,
typename Pipeable>
84 friend constexpr auto operator|(shared_closure<SharedFn> sh, Pipeable pipe)
86 requires (is_pipeable_v<Pipeable>))
88 return shared_closure<composed<Pipeable, SharedFn>>{compose(
89 static_cast<Pipeable &&
>(pipe),
static_cast<SharedFn &&
>(sh))};
93 template<
typename SharedFn>
98 shared_closure() =
default;
99 constexpr explicit shared_closure(SharedFn fn)
100 : SharedFn(
static_cast<SharedFn &&
>(fn))
108 template(
typename Rng)(
110 constructible_from<detail::decay_t<Rng>, Rng>)
123 template<
typename SharedFn>
124 RANGES_INLINE_VAR
constexpr bool
125 is_pipeable_v<experimental::shared_closure<SharedFn>> =
true;
129#include <range/v3/detail/epilogue.hpp>
The viewable_range concept.
RANGES_INLINE_VARIABLE(detail::to_container_fn< detail::from_range< std::vector > >, to_vector) template< template< typename... > class ContT > auto to(RANGES_HIDDEN_DETAIL(detail
For initializing a container of the specified type with the elements of an Range.
Definition conversion.hpp:399
decltype(begin(declval(Rng &))) iterator_t
Definition access.hpp:698
Definition compose.hpp:33
Definition shared.hpp:107