25 namespace seqan3::detail
37 constexpr
auto operator()(
size_t drop_size)
const noexcept
39 return detail::adaptor_from_functor{*
this, drop_size};
45 template <std::ranges::range urng_t>
46 constexpr
auto operator()(urng_t && urange,
size_t drop_size)
const
48 static_assert(std::ranges::viewable_range<urng_t>,
49 "The views::drop adaptor can only be passed viewable_ranges, i.e. Views or &-to-non-View.");
51 [[maybe_unused]]
size_t new_size = -1;
54 if constexpr (std::ranges::sized_range<urng_t>)
57 drop_size =
std::min(drop_size, urange_size);
58 new_size = urange_size - drop_size;
64 return urange.substr(drop_size);
73 else if constexpr (std::ranges::borrowed_range<urng_t> &&
74 std::ranges::contiguous_range<urng_t> &&
75 std::ranges::sized_range<urng_t>)
77 return std::span{std::ranges::data(urange) + drop_size, new_size};
80 else if constexpr (std::ranges::borrowed_range<urng_t> &&
81 std::ranges::random_access_range<urng_t> &&
82 std::ranges::sized_range<urng_t>)
84 return std::ranges::subrange<std::ranges::iterator_t<urng_t>, std::ranges::iterator_t<urng_t>>
169 inline constexpr
auto drop = detail::drop_fn{};