24namespace seqan3::detail
27template <
typename search_configuration_t>
28 requires seqan3::detail::is_type_specialisation_of_v<search_configuration_t, configuration>
29struct policy_search_result_builder;
64template <
typename query_id_type,
66 typename reference_id_type,
67 typename reference_begin_position_type>
68 requires (std::integral<query_id_type> || std::same_as<query_id_type, detail::empty_type>)
69 && (detail::template_specialisation_of<cursor_type, fm_index_cursor>
70 || detail::template_specialisation_of<cursor_type, bi_fm_index_cursor>
71 || std::same_as<cursor_type, detail::empty_type>)
72 && (std::integral<reference_id_type> || std::same_as<reference_id_type, detail::empty_type>)
73 && (std::integral<reference_begin_position_type>
74 || std::same_as<reference_begin_position_type, detail::empty_type>)
79 query_id_type query_id_{};
81 cursor_type cursor_{};
83 reference_id_type reference_id_{};
85 reference_begin_position_type reference_begin_position_{};
88 template <
typename search_configuration_t>
89 requires seqan3::detail::is_type_specialisation_of_v<search_configuration_t, configuration>
90 friend struct detail::policy_search_result_builder;
112 static_assert(!std::same_as<query_id_type, detail::empty_type>,
113 "You tried to access the query_id but it was not selected in the output "
114 "configuration of the search.");
123 constexpr auto index_cursor() const noexcept(!(
std::same_as<cursor_type, detail::empty_type>))
125 static_assert(!std::same_as<cursor_type, detail::empty_type>,
126 "You tried to access the index cursor but it was not selected in the output "
127 "configuration of the search.");
138 constexpr auto reference_id() const noexcept(!(
std::same_as<reference_id_type, detail::empty_type>))
140 static_assert(!std::same_as<reference_id_type, detail::empty_type>,
141 "You tried to access the reference id but it was not selected in the output "
142 "configuration of the search.");
144 return reference_id_;
149 noexcept(!(
std::same_as<reference_begin_position_type, detail::empty_type>))
151 static_assert(!std::same_as<reference_begin_position_type, detail::empty_type>,
152 "You tried to access the reference begin position but it was not selected in the "
153 "output configuration of the search.");
155 return reference_begin_position_;
165 bool equality = lhs.query_id_ == rhs.query_id_;
166 if constexpr (!std::is_same_v<cursor_type, detail::empty_type>)
167 equality &= lhs.cursor_ == rhs.cursor_;
168 if constexpr (!std::is_same_v<reference_id_type, detail::empty_type>)
169 equality &= lhs.reference_id_ == rhs.reference_id_;
170 if constexpr (!std::is_same_v<reference_begin_position_type, detail::empty_type>)
171 equality &= lhs.reference_begin_position_ == rhs.reference_begin_position_;
179 return !(lhs == rhs);
191template <
typename... specs_t>
200 template <
typename stream_t,
typename arg_t>
201 constexpr void operator()(stream_t & stream, arg_t && arg)
const
203 using result_type_list =
type_list<specs_t...>;
206 if constexpr (!std::same_as<list_traits::at<0, result_type_list>, detail::empty_type>)
207 stream <<
"query_id:" << arg.query_id();
208 if constexpr (!std::same_as<list_traits::at<1, result_type_list>, detail::empty_type>)
209 stream <<
", index cursor is present";
210 if constexpr (!std::same_as<list_traits::at<2, result_type_list>, detail::empty_type>)
211 stream <<
", reference_id:" << arg.reference_id();
212 if constexpr (!std::same_as<list_traits::at<3, result_type_list>, detail::empty_type>)
213 stream <<
", reference_pos:" << arg.reference_begin_position();
Provides the seqan3::bi_fm_index_cursor for searching in the bidirectional seqan3::bi_fm_index.
The result class generated by the seqan3::seach algorithm.
Definition search_result.hpp:76
friend bool operator!=(search_result const &lhs, search_result const &rhs) noexcept
Returns whether lhs and rhs are not the same.
Definition search_result.hpp:177
search_result()=default
Defaulted.
constexpr auto index_cursor() const noexcept(!(std::same_as< cursor_type, detail::empty_type >))
Returns the index cursor pointing to the suffix array range where the query was found.
Definition search_result.hpp:123
constexpr auto reference_begin_position() const noexcept(!(std::same_as< reference_begin_position_type, detail::empty_type >))
Returns the reference begin positions where the query was found in the reference text (at reference i...
Definition search_result.hpp:148
search_result & operator=(search_result &&)=default
Defaulted.
search_result(search_result &&)=default
Defaulted.
friend bool operator==(search_result const &lhs, search_result const &rhs) noexcept
Returns whether lhs and rhs are the same.
Definition search_result.hpp:163
constexpr auto query_id() const noexcept
Returns the id of the query which produced this search result.
Definition search_result.hpp:110
search_result & operator=(search_result const &)=default
Defaulted.
search_result(search_result const &)=default
Defaulted.
~search_result()=default
Defaulted.
constexpr auto reference_id() const noexcept(!(std::same_as< reference_id_type, detail::empty_type >))
Returns the reference id where the query was found.
Definition search_result.hpp:138
Provides seqan3::configuration and utility functions.
Provides seqan3::debug_stream and related types.
Provides seqan3::detail::empty_type.
Provides the seqan3::fm_index_cursor for searching in the unidirectional seqan3::fm_index.
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
SeqAn specific customisations in the standard namespace.
Provides the concept for seqan3::detail::sdsl_index.
constexpr void operator()(stream_t &stream, arg_t &&arg) const
Prints the search result.
Definition search_result.hpp:201
Definition default_printer.hpp:43
Type that contains multiple types.
Definition type_list.hpp:26
Provides type traits for working with templates.