36 SEQAN3_CONCEPT fields_specialisation = is_value_specialisation_of_v<t, fields>;
62 template <
typename field_types,
63 typename field_types_as_ids,
64 typename selected_field_ids,
66 typename ...return_types>
77 template <
typename field_types,
78 typename field_types_as_ids,
79 typename selected_field_ids,
81 typename ...return_types>
88 template <
typename field_types,
89 typename field_types_as_ids,
90 typename selected_field_ids,
92 typename ...return_types>
93 requires (field_no < selected_field_ids::as_array.
size())
94 struct
select_types_with_ids<field_types, field_types_as_ids, selected_field_ids, field_no, return_types...>
97 "You selected a field that was not in field_types_as_ids.");
106 selected_field_ids::as_array[field_no]), field_types>>;
120 template <field f,
typename field_types,
typename field_
ids>
124 return std::get<field_ids::index_of(f)>(r);
130 template <field f,
typename field_types,
typename field_
ids>
134 return std::get<field_ids::index_of(f)>(r);
140 template <
size_t i, tuple_like tuple_t>
143 if constexpr (i < std::tuple_size_v<tuple_t>)
144 return std::get<i>(t);
150 template <
size_t i, tuple_like tuple_t>
153 if constexpr (i < std::tuple_size_v<tuple_t>)
154 return std::get<i>(t);
169 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
170 decltype(
auto)
get_or(
record<field_types, field_ids> & r, or_type && or_value)
173 return std::get<field_ids::index_of(f)>(r);
175 return std::forward<or_type>(or_value);
179 template <field f,
typename field_types,
typename field_
ids,
typename or_type>
180 decltype(
auto)
get_or(
record<field_types, field_ids> const & r, or_type && or_value)
183 return std::get<field_ids::index_of(f)>(r);
185 return std::forward<or_type>(or_value);
189 template <
size_t i,
typename or_type,
typename ...types>
190 decltype(
auto)
get_or(
std::tuple<types...> & t, or_type && or_value)
192 if constexpr (i <
sizeof...(types))
193 return std::get<i>(t);
195 return std::forward<or_type>(or_value);
199 template <
size_t i,
typename or_type,
typename ...types>
200 decltype(
auto)
get_or(
std::tuple<types...> const & t, or_type && or_value)
202 if constexpr (i <
sizeof...(types))
203 return std::get<i>(t);
205 return std::forward<or_type>(or_value);
214 template <std::ranges::input_range rng_t>
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: record.hpp:86
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: record.hpp:170
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: record.hpp:121
meta::list< types... > type_list
Type that contains multiple types, an alias for meta::list.
Definition: type_list.hpp:31
constexpr bool contains
Whether a type occurs in a type list or not.
Definition: traits.hpp:194
typename decltype(detail::at< idx >(list_t{}))::type at
Return the type at given index from the type list.
Definition: traits.hpp:223
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:150
constexpr detail::repeat_fn repeat
A view factory that repeats a given value infinitely.
Definition: repeat.hpp:355
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
auto & range_wrap_ignore(rng_t &range)
Pass through the reference to the argument in case the argument satisfies std::ranges::input_range.
Definition: record.hpp:215
SeqAn specific customisations in the standard namespace.
Adaptations of concepts from the Ranges TS.
Provides the seqan3::record template and the seqan3::field enum.
Exposes a subset of types as a seqan3::type_list selected based on their IDs.
Definition: record.hpp:68
type_list< return_types... > type
The return type.
Definition: record.hpp:70
The class template that file records are based on; behaves like an std::tuple.
Definition: record.hpp:227
Provides seqan3::tuple_like.
Provides traits for seqan3::type_list.
Provides the seqan3::views::repeat.