42 template <
typename query_t>
46 if constexpr(range_dimension_v<pure_query_t> == 1u)
48 static_assert(std::ranges::random_access_range<pure_query_t>,
49 "The query sequence must model random_access_range.");
50 static_assert(std::ranges::sized_range<pure_query_t>,
"The query sequence must model sized_range.");
54 static_assert(std::ranges::forward_range<pure_query_t>,
"The query collection must model forward_range.");
55 static_assert(std::ranges::sized_range<pure_query_t>,
"The query collection must model sized_range.");
56 static_assert(std::ranges::random_access_range<std::ranges::range_value_t<pure_query_t>>,
57 "Elements of the query collection must model random_access_range.");
58 static_assert(std::ranges::sized_range<std::ranges::range_value_t<pure_query_t>>,
59 "Elements of the query collection must model sized_range.");
101 template <
typename index_t,
102 std::ranges::forward_range queries_t,
105 requires std::ranges::forward_range<std::ranges::range_reference_t<queries_t>> &&
106 std::same_as<range_innermost_value_t<queries_t>,
typename index_t::alphabet_type>
109 index_t
const & index,
114 detail::search_configuration_validator::validate_query_type<queries_t>();
116 size_t queries_size = std::ranges::distance(queries);
117 auto indexed_queries = views::zip(
std::views::iota(
size_t{0}, queries_size), queries);
119 using indexed_queries_t = decltype(indexed_queries);
121 using query_t = std::ranges::range_reference_t<indexed_queries_t>;
122 auto [algorithm, complete_config] = detail::search_configurator::configure_algorithm<query_t>(updated_cfg, index);
124 using complete_configuration_t = decltype(complete_config);
126 using algorithm_result_t =
typename traits_t::search_result_type;
128 complete_configuration_t::template exists<search_cfg::parallel>(),
133 auto select_execution_handler = [&] ()
135 if constexpr (std::same_as<execution_handler_t, detail::execution_handler_parallel>)
137 auto thread_count = get<search_cfg::parallel>(complete_config).thread_count;
139 throw std::runtime_error{
"You must configure the number of threads in seqan3::search_cfg::parallel."};
141 return execution_handler_t{*thread_count};
145 return execution_handler_t{};
150 if constexpr (traits_t::has_user_callback)
152 select_execution_handler().bulk_execute(algorithm,
154 get<search_cfg::on_result>(complete_config).callback);
161 execution_handler_t>;
165 algorithm_result_t{},
166 select_execution_handler()}};
173 template <
typename index_t,
174 std::ranges::forward_range queries_t,
176 requires std::ranges::forward_range<std::ranges::range_reference_t<queries_t>> &&
177 (!std::same_as<range_innermost_value_t<queries_t>,
typename index_t::alphabet_type>)
179 index_t
const & index,
183 "The alphabet of the text collection must be convertible to the alphabet of the index.");
185 if constexpr (range_dimension_v<queries_t> == 2u)
186 return search(queries | views::deep{views::convert<typename index_t::alphabet_type>}, index, cfg);
188 return search(queries | views::convert<typename index_t::alphabet_type>, index, cfg);
193 template <
typename index_t,
194 std::ranges::forward_range query_t,
197 index_t
const & index,
204 template <
typename index_t,
typename configuration_t = decltype(search_cfg::default_configuration)>
205 inline auto search(
char const *
const queries,
206 index_t
const & index,
213 template <
typename index_t,
typename configuration_t = decltype(search_cfg::default_configuration)>
215 index_t
const & index,
Provides seqan3::detail::algorithm_executor_blocking.
Provides seqan3::detail::algorithm_result_generator_range.
Adaptations of algorithms from the Ranges TS.
An input range over the algorithm results generated by the underlying algorithm executor.
Definition: algorithm_result_generator_range.hpp:44
A blocking algorithm executor for algorithms.
Definition: algorithm_executor_blocking.hpp:64
Handles the parallel execution of algorithms.
Definition: execution_handler_parallel.hpp:55
static auto add_defaults(configuration_t const &cfg)
Adds default configurations if they were not set by the user.
Definition: search_configurator.hpp:140
Provides seqan3::configuration and utility functions.
Provides seqan3::views::deep.
Provides the default configuration for the seqan3::search() interface.
constexpr void for_each(unary_function_t &&fn, pack_t &&...args)
Applies a function to each element of the given function parameter pack.
Definition: pack_algorithm.hpp:195
typename range_innermost_value< t >::type range_innermost_value_t
Shortcut for seqan3::range_innermost_value (transformation_trait shortcut).
Definition: type_traits.hpp:240
const configuration default_configuration
The default configuration: Compute all exact matches.
Definition: default_configuration.hpp:32
auto search(queries_t &&queries, index_t const &index, configuration_t const &cfg=search_cfg::default_configuration)
Search a query or a range of queries in an index.
Definition: search.hpp:108
constexpr simd_t iota(typename simd_traits< simd_t >::scalar_type const offset)
Fills a seqan3::simd::simd_type vector with the scalar values offset, offset+1, offset+2,...
Definition: algorithm.hpp:299
@ single
The text is a single range.
Definition: concept.hpp:84
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:150
constexpr auto persist
A view adaptor that wraps rvalue references of non-views.
Definition: persist.hpp:233
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:70
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides seqan3::search_cfg::on_result.
Provides seqan3::search_cfg::parallel configuration.
Provides seqan3::views::persist.
Provides seqan3::views::convert.
Adaptations of concepts from the Ranges TS.
Provides seqan3::detail::search_configurator.
Provides seqan3::detail::search_traits.
Handles the sequential execution of algorithms.
Definition: execution_handler_sequential.hpp:34
Class used to validate the search configuration.
Definition: search.hpp:37
static void validate_query_type()
Validates the query type to model std::ranges::random_access_range and std::ranges::sized_range.
Definition: search.hpp:43
A collection of traits extracted from the search configuration.
Definition: search_traits.hpp:34
Provides seqan3::views::zip.