61template <
typename field_types,
62 typename field_types_as_ids,
63 typename selected_field_ids,
65 typename... return_types>
75template <
typename field_types,
76 typename field_types_as_ids,
77 typename selected_field_ids,
79 typename... return_types>
81 typename select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>::
84template <
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())
92 static_assert(field_types_as_ids::contains(selected_field_ids::as_array[field_no]),
93 "You selected a field that was not in field_types_as_ids.");
102 list_traits::at<field_types_as_ids::index_of(selected_field_ids::as_array[field_no]), field_types>>;
112template <field f,
typename field_types,
typename field_
ids>
115 if constexpr (field_ids::contains(f))
116 return std::get<field_ids::index_of(f)>(r);
122template <field f,
typename field_types,
typename field_
ids>
125 if constexpr (field_ids::contains(f))
126 return std::get<field_ids::index_of(f)>(r);
132template <
size_t i, tuple_like tuple_t>
135 if constexpr (i < std::tuple_size_v<tuple_t>)
136 return std::get<i>(t);
142template <
size_t i, tuple_like tuple_t>
145 if constexpr (i < std::tuple_size_v<tuple_t>)
146 return std::get<i>(t);
157template <field f,
typename field_types,
typename field_
ids,
typename or_type>
160 if constexpr (field_ids::contains(f))
161 return std::get<field_ids::index_of(f)>(r);
163 return std::forward<or_type>(or_value);
167template <field f,
typename field_types,
typename field_
ids,
typename or_type>
170 if constexpr (field_ids::contains(f))
171 return std::get<field_ids::index_of(f)>(r);
173 return std::forward<or_type>(or_value);
177template <
size_t i,
typename or_type,
typename... types>
180 if constexpr (i <
sizeof...(types))
181 return std::get<i>(t);
183 return std::forward<or_type>(or_value);
187template <
size_t i,
typename or_type,
typename... types>
190 if constexpr (i <
sizeof...(types))
191 return std::get<i>(t);
193 return std::forward<or_type>(or_value);
202template <std::ranges::input_range rng_t>
Auxiliary concept that checks whether a type is a specialisation of seqan3::fields.
Definition: detail/record.hpp:35
auto & get_or_ignore(record< field_types, field_ids > &r)
Access an element in a std::tuple or seqan3::record; return reference to std::ignore if not contained...
Definition: detail/record.hpp:113
decltype(auto) get_or(record< field_types, field_ids > &r, or_type &&or_value)
Access an element in a std::tuple or seqan3::record; return or_value if not contained.
Definition: detail/record.hpp:158
auto & range_wrap_ignore(rng_t &range)
Pass through the reference to the argument in case the argument satisfies std::ranges::input_range.
Definition: detail/record.hpp:203
typename decltype(detail::at< idx >(list_t{}))::type at
Return the type at given index from the type list.
Definition: type_list/traits.hpp:279
constexpr detail::repeat_fn repeat
A view factory that repeats a given value infinitely.
Definition: repeat.hpp:342
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides the seqan3::record template and the seqan3::field enum.
Provides the seqan3::views::repeat.
Exposes a subset of types as a seqan3::type_list selected based on their IDs.
Definition: detail/record.hpp:67
typename select_types_with_ids< field_types, field_types_as_ids, selected_field_ids, field_no, return_types... >::type select_types_with_ids_t
Shortcut for seqan3::select_types_with_ids (transformation_trait shortcut).
Definition: detail/record.hpp:82
The class template that file records are based on; behaves like a std::tuple.
Definition: record.hpp:192
Type that contains multiple types.
Definition: type_list.hpp:29
Provides traits for seqan3::type_list.
Provides seqan3::tuple_like.