44 #include <range/v3/view/repeat.hpp> 62 concept fields_concept = is_value_specialisation_of_v<t, fields>;
94 template <
typename field_types,
95 typename field_types_as_ids,
96 typename selected_field_ids,
98 typename ... return_types>
99 struct select_types_with_ids
109 template <
typename field_types,
110 typename field_types_as_ids,
111 typename selected_field_ids,
113 typename ... return_types>
114 using select_types_with_ids_t =
typename select_types_with_ids<field_types,
118 return_types...>::type;
120 template <
typename field_types,
121 typename field_types_as_ids,
122 typename selected_field_ids,
124 typename ... return_types>
125 requires field_no < selected_field_ids::as_array.size()
126 struct select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>
128 static_assert(field_types_as_ids::contains(selected_field_ids::as_array[field_no]),
129 "You selected a field that was not in field_types_as_ids.");
132 using type = select_types_with_ids_t<field_types,
137 meta::at_c<field_types,
138 field_types_as_ids::index_of(selected_field_ids::as_array[field_no])>>;
151 template <field f,
typename field_types,
typename field_
ids>
155 if constexpr (field_ids::contains(f))
156 return std::get<field_ids::index_of(f)>(r);
162 template <field f,
typename field_types,
typename field_
ids>
165 if constexpr (field_ids::contains(f))
166 return std::get<field_ids::index_of(f)>(r);
172 template <
size_t i,
typename ... types>
173 auto & get_or_ignore(std::tuple<types...> & t)
175 if constexpr (i <
sizeof...(types))
176 return std::get<i>(t);
182 template <
size_t i,
typename ... types>
183 auto const & get_or_ignore(std::tuple<types...>
const & t)
185 if constexpr (i <
sizeof...(types))
186 return std::get<i>(t);
200 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
204 if constexpr (field_ids::contains(f))
205 return std::get<field_ids::index_of(f)>(r);
207 return std::forward<or_type>(or_value);
211 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
214 if constexpr (field_ids::contains(f))
215 return std::get<field_ids::index_of(f)>(r);
217 return std::forward<or_type>(or_value);
221 template <
size_t i,
typename or_type,
typename ... types>
222 decltype(
auto) get_or(std::tuple<types...> & t, or_type && or_value)
224 if constexpr (i <
sizeof...(types))
225 return std::get<i>(t);
227 return std::forward<or_type>(or_value);
231 template <
size_t i,
typename or_type,
typename ... types>
232 decltype(
auto) get_or(std::tuple<types...>
const & t, or_type && or_value)
234 if constexpr (i <
sizeof...(types))
235 return std::get<i>(t);
237 return std::forward<or_type>(or_value);
246 template <std::ranges::InputRange rng_t>
247 inline auto & range_wrap_ignore(rng_t & range)
258 inline auto range_wrap_ignore(ignore_t
const &)
260 return ranges::view::repeat(std::ignore);
The class template that file records are based on; behaves like an std::tuple.
Definition: record.hpp:208
Provides the seqan3::record template and the seqan3::field enum.
Adaptations of concepts from the Ranges TS.
Definition: aligned_sequence_concept.hpp:288
Provides various metafunctions on generic types.
meta::list< types... > type_list
Type that contains multiple types, an alias for meta::list.
Definition: type_list.hpp:54