27 namespace seqan3::detail
38 constexpr
auto operator()(ptrdiff_t begin_pos, ptrdiff_t end_pos)
const noexcept
40 return detail::adaptor_from_functor{*
this, begin_pos, end_pos};
46 template <std::ranges::viewable_range urng_t>
47 constexpr
auto operator()(urng_t && urange,
48 std::ranges::range_difference_t<urng_t> begin_pos,
49 std::ranges::range_difference_t<urng_t> end_pos)
const
51 using position_t = std::ranges::range_difference_t<urng_t>;
52 if constexpr (std::ranges::sized_range<urng_t>)
56 begin_pos =
std::min(begin_pos, urange_size);
57 end_pos =
std::min(end_pos, urange_size);
59 position_t target_size = end_pos - begin_pos;
61 if (end_pos < begin_pos)
62 throw std::invalid_argument{
"end_pos argument to seqan3::views::slice must be >= the begin_pos argument."};
67 #if SEQAN3_WORKAROUND_GCC_100139
71 return urange.substr(begin_pos,
static_cast<size_t>(target_size));
80 else if constexpr (std::ranges::borrowed_range<urng_t> &&
81 std::ranges::contiguous_range<urng_t> &&
82 std::ranges::sized_range<urng_t>)
84 return std::span{std::ranges::data(urange) + begin_pos,
static_cast<size_t>(target_size)};
87 else if constexpr (std::ranges::borrowed_range<urng_t> &&
88 std::ranges::random_access_range<urng_t> &&
89 std::ranges::sized_range<urng_t>)
91 return std::ranges::subrange<std::ranges::iterator_t<urng_t>, std::ranges::iterator_t<urng_t>>
95 static_cast<size_t>(target_size)
189 inline constexpr
auto slice = detail::slice_fn{};
Provides seqan3::detail::adaptor_from_functor.
typename decltype(detail::split_after< i >(list_t{}))::first_type take
Return a seqan3::type_list of the first n types in the input type list.
Definition: traits.hpp:368
typename decltype(detail::split_after< i >(list_t{}))::second_type drop
Return a seqan3::type_list of the types in the input type list, except the first n.
Definition: traits.hpp:388
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:151
constexpr auto slice
A view adaptor that returns a half-open interval on the underlying range.
Definition: slice.hpp:189
constexpr auto type_reduce
A view adaptor that behaves like std::views::all, but type erases certain ranges.
Definition: type_reduce.hpp:158
Provides exceptions used in the I/O module.
Provides C++20 additions to the <iterator> header.
The SeqAn namespace for views.
Definition: char_to.hpp:22
Adaptations of concepts from the Ranges TS.
Provides std::span from the C++20 standard library.
[DEPRECATED] Provides seqan3::views::take.
Provides C++20 additions to the type_traits header.
Provides seqan3::views::type_reduce.