23 struct seed : seqan3::detail::strong_type<uint64_t, seed>
25 using seqan3::detail::strong_type<uint64_t, seed>::strong_type;
29 struct window_size : seqan3::detail::strong_type<uint32_t, window_size>
31 using seqan3::detail::strong_type<uint32_t, window_size>::strong_type;
35 namespace seqan3::detail
38 struct minimiser_hash_fn
46 constexpr
auto operator()(shape
const & shape, window_size
const window_size)
const
48 return seqan3::detail::adaptor_from_functor{*
this, shape, window_size};
58 constexpr
auto operator()(shape
const & shape, window_size
const window_size, seed
const seed)
const
60 return seqan3::detail::adaptor_from_functor{*
this, shape, window_size, seed};
72 template <std::ranges::range urng_t>
73 constexpr
auto operator()(urng_t && urange,
75 window_size
const window_size,
76 seed
const seed = seed{0x8F3F73B5CF1C9ADE})
const
78 static_assert(std::ranges::viewable_range<urng_t>,
79 "The range parameter to views::minimiser_hash cannot be a temporary of a non-view range.");
80 static_assert(std::ranges::forward_range<urng_t>,
81 "The range parameter to views::minimiser_hash must model std::ranges::forward_range.");
82 static_assert(
semialphabet<std::ranges::range_reference_t<urng_t>>,
83 "The range parameter to views::minimiser_hash must be over elements of seqan3::semialphabet.");
85 if (shape.size() > window_size.get())
90 {
return i ^ seed.get();});
96 {
return i ^ seed.get();})
97 | std::views::reverse;
99 return seqan3::detail::minimiser_view(forward_strand, reverse_strand, window_size.get() - shape.size() + 1);