26 namespace seqan3::detail::adl_only
30 template <
typename ...args_t>
34 struct is_pair_open_fn
43 template <typename rna_structure_t>
45 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
47 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
49 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
50 "Only overloads that are marked noexcept are picked up by seqan3::is_pair_open().");
51 static_assert(
std::same_as<
bool, decltype(impl(priority_tag<2>{}, chr))>,
52 "The return type of your is_pair_open() implementation must be 'bool'.");
54 return impl(priority_tag<2>{}, chr);
96 inline constexpr
auto is_pair_open = detail::adl_only::is_pair_open_fn{};
105 namespace seqan3::detail::adl_only
109 template <
typename ...args_t>
113 struct is_pair_close_fn
122 template <typename rna_structure_t>
124 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
126 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
128 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
129 "Only overloads that are marked noexcept are picked up by seqan3::is_pair_close().");
130 static_assert(
std::same_as<
bool, decltype(impl(priority_tag<2>{}, chr))>,
131 "The return type of your is_pair_close() implementation must be 'bool'.");
133 return impl(priority_tag<2>{}, chr);
184 namespace seqan3::detail::adl_only
188 template <
typename ...args_t>
192 struct is_unpaired_fn
201 template <typename rna_structure_t>
203 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
205 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
207 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
208 "Only overloads that are marked noexcept are picked up by seqan3::is_unpaired().");
209 static_assert(
std::same_as<
bool, decltype(impl(priority_tag<2>{}, chr))>,
210 "The return type of your is_unpaired() implementation must be 'bool'.");
212 return impl(priority_tag<2>{}, chr);
254 inline constexpr
auto is_unpaired = detail::adl_only::is_unpaired_fn{};
263 namespace seqan3::detail::adl_only
267 template <
typename ...args_t>
275 template <
typename alph_t,
277 seqan3::is_constexpr_default_constructible_v<remove_cvref_t<alph_t>>,
278 remove_cvref_t<alph_t>,
280 struct max_pseudoknot_depth_fn
289 template <
typename dummy =
int>
291 requires requires { { impl(priority_tag<2>{}, s_alph_t{}, dummy{}) }; }
293 constexpr
auto operator()() const noexcept
295 static_assert(noexcept(impl(priority_tag<2>{}, s_alph_t{})),
296 "Only overloads that are marked noexcept are picked up by seqan3::max_pseudoknot_depth.");
298 "The return type of your max_pseudoknot_depth implementation must be convertible to size_t.");
300 "Only overloads that are marked constexpr are picked up by seqan3::max_pseudoknot_depth.");
302 return impl(priority_tag<2>{}, s_alph_t{});
308 template <
typename alph_t>
309 requires requires { { max_pseudoknot_depth_fn<alph_t>{} }; }
310 inline constexpr
auto max_pseudoknot_depth_obj = max_pseudoknot_depth_fn<alph_t>{};
360 template <
typename alph_t>
362 requires requires { { detail::adl_only::max_pseudoknot_depth_fn<alph_t>{} }; } &&
363 requires { { detail::adl_only::max_pseudoknot_depth_obj<alph_t>() }; }
373 namespace seqan3::detail::adl_only
377 template <
typename ...args_t>
381 struct pseudoknot_id_fn
390 template <typename rna_structure_t>
392 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
394 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
396 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
397 "Only overloads that are marked noexcept are picked up by seqan3::pseudoknot_id().");
399 "The return type of your pseudoknot_id() implementation must be convertible to std::optional<size_t>.");
401 return impl(priority_tag<2>{}, chr);
486 template <
typename t>
496 requires seqan3::max_pseudoknot_depth<t> > 0;