24 namespace seqan3::detail
35 concept fields_specialisation = is_value_specialisation_of_v<t, fields>;
61 template <
typename field_types,
62 typename field_types_as_ids,
63 typename selected_field_ids,
65 typename... return_types>
66 struct select_types_with_ids
69 using type = type_list<return_types...>;
75 template <
typename field_types,
76 typename field_types_as_ids,
77 typename selected_field_ids,
79 typename... return_types>
80 using select_types_with_ids_t =
81 typename select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>::
84 template <
typename field_types,
85 typename field_types_as_ids,
86 typename selected_field_ids,
88 typename... return_types>
89 requires (field_no < selected_field_ids::as_array.
size())
90 struct select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>
93 "You selected a field that was not in field_types_as_ids.");
96 using type = select_types_with_ids_t<
102 list_traits::at<field_types_as_ids::index_of(selected_field_ids::as_array[field_no]), field_types>>;
112 template <field f,
typename field_types,
typename field_
ids>
113 auto & get_or_ignore(record<field_types, field_ids> & r)
116 return std::get<field_ids::index_of(f)>(r);
122 template <field f,
typename field_types,
typename field_
ids>
123 auto const & get_or_ignore(record<field_types, field_ids>
const & r)
126 return std::get<field_ids::index_of(f)>(r);
132 template <
size_t i, tuple_like tuple_t>
133 auto & get_or_ignore(tuple_t & t)
135 if constexpr (i < std::tuple_size_v<tuple_t>)
136 return std::get<i>(t);
142 template <
size_t i, tuple_like tuple_t>
143 auto const & get_or_ignore(tuple_t
const & t)
145 if constexpr (i < std::tuple_size_v<tuple_t>)
146 return std::get<i>(t);
157 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
158 decltype(
auto) get_or(record<field_types, field_ids> & r, or_type && or_value)
161 return std::get<field_ids::index_of(f)>(r);
163 return std::forward<or_type>(or_value);
167 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
168 decltype(
auto) get_or(record<field_types, field_ids> const & r, or_type && or_value)
171 return std::get<field_ids::index_of(f)>(r);
173 return std::forward<or_type>(or_value);
177 template <
size_t i,
typename or_type,
typename... types>
178 decltype(
auto) get_or(
std::tuple<types...> & t, or_type && or_value)
180 if constexpr (i <
sizeof...(types))
181 return std::get<i>(t);
183 return std::forward<or_type>(or_value);
187 template <
size_t i,
typename or_type,
typename... types>
188 decltype(
auto) get_or(
std::tuple<types...> const & t, or_type && or_value)
190 if constexpr (i <
sizeof...(types))
191 return std::get<i>(t);
193 return std::forward<or_type>(or_value);
202 template <std::ranges::input_range rng_t>
203 inline auto & range_wrap_ignore(rng_t & range)
215 inline auto range_wrap_ignore(ignore_t
const &)
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
requires constexpr seqan3::detail::template_specialisation_of< list_t, seqan3::type_list > bool contains
Whether a type occurs in a type list or not.
Definition: type_list/traits.hpp:252
constexpr size_t size
The size of a type pack.
Definition: type_pack/traits.hpp:146
constexpr detail::repeat_fn repeat
A view factory that repeats a given value infinitely.
Definition: repeat.hpp:342
SeqAn specific customisations in the standard namespace.
The <ranges> header from C++20's standard library.
Provides the seqan3::record template and the seqan3::field enum.
Provides the seqan3::views::repeat.
Provides traits for seqan3::type_list.
Provides seqan3::tuple_like.