21namespace seqan3::detail
32concept fields_specialisation = is_value_specialisation_of_v<t, fields>;
58template <
typename field_types,
59 typename field_types_as_ids,
60 typename selected_field_ids,
62 typename... return_types>
63struct select_types_with_ids
66 using type = type_list<return_types...>;
72template <
typename field_types,
73 typename field_types_as_ids,
74 typename selected_field_ids,
76 typename... return_types>
77using select_types_with_ids_t =
78 typename select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>::
81template <
typename field_types,
82 typename field_types_as_ids,
83 typename selected_field_ids,
85 typename... return_types>
86 requires (field_no < selected_field_ids::as_array.size())
87struct select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>
89 static_assert(field_types_as_ids::contains(selected_field_ids::as_array[field_no]),
90 "You selected a field that was not in field_types_as_ids.");
93 using type = select_types_with_ids_t<
99 list_traits::at<field_types_as_ids::index_of(selected_field_ids::as_array[field_no]), field_types>>;
109template <field f,
typename field_types,
typename field_
ids>
110auto & get_or_ignore(record<field_types, field_ids> & r)
112 if constexpr (field_ids::contains(f))
113 return std::get<field_ids::index_of(f)>(r);
119template <field f,
typename field_types,
typename field_
ids>
120auto const & get_or_ignore(record<field_types, field_ids>
const & r)
122 if constexpr (field_ids::contains(f))
123 return std::get<field_ids::index_of(f)>(r);
129template <
size_t i, tuple_like tuple_t>
130auto & get_or_ignore(tuple_t & t)
132 if constexpr (i < std::tuple_size_v<tuple_t>)
133 return std::get<i>(t);
139template <
size_t i, tuple_like tuple_t>
140auto const & get_or_ignore(tuple_t
const & t)
142 if constexpr (i < std::tuple_size_v<tuple_t>)
143 return std::get<i>(t);
154template <field f,
typename field_types,
typename field_
ids,
typename or_type>
155decltype(
auto) get_or(record<field_types, field_ids> & r, or_type && or_value)
157 if constexpr (field_ids::contains(f))
158 return std::get<field_ids::index_of(f)>(r);
160 return std::forward<or_type>(or_value);
164template <field f,
typename field_types,
typename field_
ids,
typename or_type>
165decltype(
auto) get_or(record<field_types, field_ids>
const & r, or_type && or_value)
167 if constexpr (field_ids::contains(f))
168 return std::get<field_ids::index_of(f)>(r);
170 return std::forward<or_type>(or_value);
174template <
size_t i,
typename or_type,
typename... types>
177 if constexpr (i <
sizeof...(types))
178 return std::get<i>(t);
180 return std::forward<or_type>(or_value);
184template <
size_t i,
typename or_type,
typename... types>
187 if constexpr (i <
sizeof...(types))
188 return std::get<i>(t);
190 return std::forward<or_type>(or_value);
199template <std::ranges::input_range rng_t>
200inline auto & range_wrap_ignore(rng_t & range)
212inline auto range_wrap_ignore(ignore_t
const &)
typename decltype(detail::at< idx >(list_t{}))::type at
Return the type at given index from the type list.
Definition type_list/traits.hpp:276
constexpr detail::repeat_fn repeat
A view factory that repeats a given value infinitely.
Definition repeat.hpp:344
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.