14 #ifndef RANGES_V3_VIEW_TAKE_WHILE_HPP
15 #define RANGES_V3_VIEW_TAKE_WHILE_HPP
17 #include <type_traits>
31 #include <range/v3/utility/static_const.hpp>
35 #include <range/v3/detail/prologue.hpp>
41 template<
typename Rng,
typename Pred>
44 is_finite<Rng>::value ? finite : unknown>
48 RANGES_NO_UNIQUE_ADDRESS semiregular_box_t<Pred> pred_;
50 template<
bool IsConst>
54 friend struct sentinel_adaptor<!IsConst>;
55 using CRng = meta::const_if_c<IsConst, Rng>;
56 RANGES_NO_UNIQUE_ADDRESS semiregular_box_ref_or_val_t<Pred, IsConst> pred_;
59 sentinel_adaptor() =
default;
60 sentinel_adaptor(semiregular_box_ref_or_val_t<Pred, IsConst> pred)
61 : pred_(std::move(pred))
64 requires IsConst AND CPP_NOT(Other))
65 sentinel_adaptor(sentinel_adaptor<Other> that)
66 : pred_(std::move(that.pred_))
70 return it == last || !
invoke(pred_, it);
73 sentinel_adaptor<false> end_adaptor()
77 template(
bool Const =
true)(
78 requires Const AND
range<meta::const_if_c<Const, Rng>> AND
80 sentinel_adaptor<Const> end_adaptor()
const
88 : iter_take_while_view::view_adaptor{std::move(rng)}
89 , pred_(std::move(pred))
93 template<
typename Rng,
typename Pred>
99 indirect(std::move(pred))}
103 #if RANGES_CXX_DEDUCTION_GUIDES >= RANGES_CXX_DEDUCTION_GUIDES_17
104 template(
typename Rng,
typename Fun)(
105 requires copy_constructible<Fun>)
114 template(
typename Rng,
typename Pred)(
115 requires viewable_range<Rng> AND input_range<Rng> AND
118 operator()(Rng && rng, Pred pred)
const
120 return {all(
static_cast<Rng &&
>(rng)), std::move(pred)};
126 using iter_take_while_base_fn::operator();
128 template<
typename Pred>
129 constexpr
auto operator()(Pred pred)
const
131 return make_view_closure(
138 template(
typename Rng,
typename Pred)(
139 requires viewable_range<Rng> AND input_range<Rng> AND
142 operator()(Rng && rng, Pred pred)
const
144 return {all(
static_cast<Rng &&
>(rng)), std::move(pred)};
146 template(
typename Rng,
typename Pred,
typename Proj)(
147 requires viewable_range<Rng> AND input_range<Rng> AND
150 operator()(Rng && rng, Pred pred, Proj proj)
const
152 return {all(
static_cast<Rng &&
>(rng)),
153 compose(std::move(pred), std::move(proj))};
159 template<
typename Pred>
160 constexpr
auto operator()(Pred pred)
const
162 return make_view_closure(
165 template(
typename Pred,
typename Proj)(
166 requires (!range<Pred>))
167 constexpr
auto operator()(Pred && pred, Proj proj)
const
178 using take_while_base_fn::operator();
179 using take_while_bind_fn::operator();
195 using ranges::views::take_while;
197 template(
typename Rng,
typename Pred)(
198 requires viewable_range<Rng> AND input_range<Rng> AND
199 predicate<Pred &, iterator_t<Rng>> AND copy_constructible<Pred>)
205 #include <range/v3/detail/epilogue.hpp>
206 #include <range/v3/detail/satisfy_boost_range.hpp>
CPP_concept invocable
\concept invocable
Definition: concepts.hpp:48
CPP_concept predicate
\concept predicate
Definition: concepts.hpp:73
CPP_concept indirect_unary_predicate
\concept indirect_unary_predicate
Definition: concepts.hpp:632
CPP_concept range
\concept range
Definition: concepts.hpp:69
decltype(begin(declval(Rng &))) iterator_t
Definition: access.hpp:698
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
typename Fn::template invoke< Args... > invoke
Evaluate the invocable Fn with the arguments Args.
Definition: meta.hpp:541
defer< bind_back, Fn, Ts... > bind_back
Definition: meta.hpp:994
Definition: adaptor.hpp:110
Definition: compose.hpp:33
Definition: take_while.hpp:45
Definition: take_while.hpp:95
Definition: adaptor.hpp:475
constexpr CPP_member auto empty() const noexcept -> CPP_ret(bool)(requires(detail::has_fixed_size_< Cardinality >))
Test whether a range can be empty:
Definition: interface.hpp:154
Definition: take_while.hpp:113
Definition: take_while.hpp:125
Definition: take_while.hpp:137
Definition: take_while.hpp:158
Definition: take_while.hpp:177