45 #include <range/v3/view/drop_exactly.hpp> 77 template <
bool abort_on_hit,
typename query_t,
typename iterator_t,
typename delegate_t>
78 inline bool search_trivial(
iterator_t it, query_t & query,
typename iterator_t::size_type
const query_pos,
79 search_param
const error_left, delegate_t && delegate) noexcept(noexcept(delegate))
82 if (query_pos == query.size() || error_left.total == 0)
85 if (query_pos == query.size() || it.extend_right(ranges::view::drop_exactly(query, query_pos)))
95 if (error_left.insertion > 0)
97 search_param error_left2{error_left};
98 error_left2.insertion--;
103 if (search_trivial<abort_on_hit>(it, query, query_pos + 1, error_left2, delegate) && abort_on_hit)
108 if (((query_pos > 0 && error_left.deletion > 0) || error_left.substitution > 0) && it.extend_right())
113 if (error_left.substitution > 0)
115 bool delta = it.last_char() != query[query_pos];
116 search_param error_left2{error_left};
117 error_left2.total -= delta;
118 error_left2.substitution -= delta;
120 if (search_trivial<abort_on_hit>(it, query, query_pos + 1, error_left2, delegate) && abort_on_hit)
128 if (error_left.substitution == 0 && it.last_char() == query[query_pos])
130 if (search_trivial<abort_on_hit>(it, query, query_pos + 1, error_left, delegate) &&
140 if (error_left.deletion > 0)
142 search_param error_left2{error_left};
144 error_left2.deletion--;
146 if (search_trivial<abort_on_hit>(it, query, query_pos, error_left2, delegate) && abort_on_hit)
150 }
while (it.cycle_back());
155 if (it.extend_right(query[query_pos]))
157 if (search_trivial<abort_on_hit>(it, query, query_pos + 1, error_left, delegate) && abort_on_hit)
184 template <
bool abort_on_hit,
typename index_t,
typename query_t,
typename delegate_t>
185 inline void search_trivial(index_t
const & index, query_t & query, search_param
const error_left,
186 delegate_t && delegate) noexcept(noexcept(delegate))
188 search_trivial<abort_on_hit>(index.begin(), query, 0, error_left, delegate);
Additional non-standard concepts for ranges.
::ranges::iterator_t iterator_t
Alias for ranges::iterator_t. Obtains the iterator type of a range.
Definition: ranges:225
Definition: aligned_sequence_concept.hpp:288
Provides C++20 additions to the type_traits header.
Provides data structures used by different search algorithms.