23 namespace seqan3::detail
35 SEQAN3_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
76 template <
typename field_types,
77 typename field_types_as_ids,
78 typename selected_field_ids,
80 typename ...return_types>
81 using select_types_with_ids_t =
typename select_types_with_ids<field_types,
85 return_types...>::type;
87 template <
typename field_types,
88 typename field_types_as_ids,
89 typename selected_field_ids,
91 typename ...return_types>
92 requires (field_no < selected_field_ids::as_array.
size())
93 struct select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>
96 "You selected a field that was not in field_types_as_ids.");
99 using type = select_types_with_ids_t<field_types,
105 selected_field_ids::as_array[field_no]), field_types>>;
119 template <field f,
typename field_types,
typename field_
ids>
120 auto & get_or_ignore(record<field_types, field_ids> & r)
123 return std::get<field_ids::index_of(f)>(r);
129 template <field f,
typename field_types,
typename field_
ids>
130 auto const & get_or_ignore(record<field_types, field_ids>
const & r)
133 return std::get<field_ids::index_of(f)>(r);
139 template <
size_t i,
template <
tuple_like ...types_>
typename tuple_like_t,
typename ...types>
140 auto & get_or_ignore(tuple_like_t<types...> & t)
142 if constexpr (i <
sizeof...(types))
143 return std::get<i>(t);
149 template <
size_t i,
template <
tuple_like ...types_>
typename tuple_like_t,
typename ...types>
150 auto const & get_or_ignore(tuple_like_t<types...>
const & t)
152 if constexpr (i <
sizeof...(types))
153 return std::get<i>(t);
168 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
169 decltype(
auto) get_or(record<field_types, field_ids> & r, or_type && or_value)
172 return std::get<field_ids::index_of(f)>(r);
174 return std::forward<or_type>(or_value);
178 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
179 decltype(
auto) get_or(record<field_types, field_ids> const & r, or_type && or_value)
182 return std::get<field_ids::index_of(f)>(r);
184 return std::forward<or_type>(or_value);
188 template <
size_t i,
typename or_type,
typename ...types>
189 decltype(
auto) get_or(
std::tuple<types...> & t, or_type && or_value)
191 if constexpr (i <
sizeof...(types))
192 return std::get<i>(t);
194 return std::forward<or_type>(or_value);
198 template <
size_t i,
typename or_type,
typename ...types>
199 decltype(
auto) get_or(
std::tuple<types...> const & t, or_type && or_value)
201 if constexpr (i <
sizeof...(types))
202 return std::get<i>(t);
204 return std::forward<or_type>(or_value);
213 template <std::ranges::input_range rng_t>
214 inline auto & range_wrap_ignore(rng_t & range)
225 inline auto range_wrap_ignore(ignore_t
const &)
meta::list< types... > type_list
Type that contains multiple types, an alias for meta::list.
Definition: type_list.hpp:31
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:116
typename decltype(detail::at< idx >(list_t{}))::type at
Return the type at given index from the type list.
Definition: traits.hpp:523
constexpr bool contains
Whether a type occurs in a pack or not.
Definition: traits.hpp:193
constexpr detail::repeat_fn repeat
A view factory that repeats a given value infinitely.
Definition: repeat.hpp:355
Whether a type behaves like a tuple.
SeqAn specific customisations in the standard namespace.
Adaptations of concepts from the Ranges TS.
Provides the seqan3::record template and the seqan3::field enum.
Provides the views::repeat_view.
Provides traits for seqan3::type_list.
Provides seqan3::tuple_like.