14#ifndef RANGES_V3_VIEW_TAKE_WHILE_HPP
15#define RANGES_V3_VIEW_TAKE_WHILE_HPP
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)(
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)(
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)(
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)(
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>
The indirect_unary_predicate concept.
The viewable_range concept.
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
CPP_member constexpr auto empty() const noexcept -> CPP_ret(bool)()
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