void next(range_iterator_t<Rng> &it) const { auto const end = ranges::end(rng_->mutable_base()); RANGES_ASSERT(it != end); it = adjacent_find(std::move(it), end, not_(std::ref(rng_->pred_))); advance_bounded(it, 1, end); }
range_iterator_t<Rng> begin(adjacent_remove_if_view &) const { auto &beg = rng_->begin_; if(!beg) { beg = ranges::begin(rng_->mutable_base()); this->satisfy(*beg); } return *beg; }
void satisfy(range_iterator_t<Rng> &it) const { auto const end = ranges::end(rng_->mutable_base()); auto &&pred = rng_->pred_; if(it == end) return; auto next = it; for(; ++next != end; it = next) if(!pred(*it, *next)) return; }
void next(range_iterator_t<Rng> &it) const { RANGES_ASSERT(it != ranges::end(rng_->mutable_base())); this->satisfy(++it); }