14#ifndef RANGES_V3_VIEW_TRIM_HPP
15#define RANGES_V3_VIEW_TRIM_HPP
22#include <range/v3/detail/config.hpp>
36#include <range/v3/detail/prologue.hpp>
42 template<
typename Rng,
typename Pred>
47 semiregular_box_t<Pred> pred_;
48 detail::non_propagating_cache<iterator_t<Rng>> begin_;
49 detail::non_propagating_cache<iterator_t<Rng>> end_;
57 : rng_(std::move(rng))
58 , pred_(std::move(pred))
64 begin_ = find_if_not(rng_, std::ref(pred_));
71 const auto first = begin();
72 auto last = ranges::end(rng_);
74 if(!invoke(pred_, *--last))
79 end_ = std::move(last);
90 template<
typename Rng,
typename Pred>
91 RANGES_INLINE_VAR
constexpr bool enable_borrowed_range<trim_view<Rng, Pred>> =
92 enable_borrowed_range<Rng>;
94#if RANGES_CXX_DEDUCTION_GUIDES >= RANGES_CXX_DEDUCTION_GUIDES_17
95 template<
typename Rng,
typename Pred>
100 template<
typename Rng,
typename Pred>
101 RANGES_INLINE_VAR
constexpr bool disable_sized_range<trim_view<Rng, Pred>> =
true;
107 template(
typename Rng,
typename Pred)(
112 operator()(Rng && rng, Pred pred)
const
114 return {all(
static_cast<Rng &&
>(rng)), std::move(pred)};
116 template(
typename Rng,
typename Pred,
typename Proj)(
121 operator()(Rng && rng, Pred pred, Proj proj)
const
123 return {all(
static_cast<Rng &&
>(rng)),
124 compose(std::move(pred), std::move(proj))};
130 template<
typename Pred>
131 constexpr auto operator()(Pred pred)
const
133 return make_view_closure(bind_back(
trim_base_fn{}, std::move(pred)));
135 template(
typename Pred,
typename Proj)(
137 constexpr auto operator()(Pred && pred, Proj proj)
const
139 return make_view_closure(bind_back(
140 trim_base_fn{},
static_cast<Pred &&
>(pred), std::move(proj)));
147 using trim_base_fn::operator();
148 using trim_bind_fn::operator();
153 RANGES_INLINE_VARIABLE(
trim_fn, trim)
158#include <range/v3/detail/epilogue.hpp>
159#include <range/v3/detail/satisfy_boost_range.hpp>
The bidirectional_range concept.
The common_range concept.
The indirect_unary_predicate concept.
The viewable_range concept.
decltype(begin(declval(Rng &))) iterator_t
Definition access.hpp:698
Definition compose.hpp:33
Definition interface.hpp:129