46 struct is_pair_open_fn
55 template <typename rna_structure_t>
57 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
59 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
61 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
62 "Only overloads that are marked noexcept are picked up by seqan3::is_pair_open().");
63 static_assert(
std::Same<
bool, decltype(impl(priority_tag<2>{}, chr))>,
64 "The return type of your is_pair_open() implementation must be 'bool'.");
66 return impl(priority_tag<2>{}, chr);
110 inline constexpr
auto is_pair_open = detail::adl::only::is_pair_open_fn{};
123 struct is_pair_close_fn
132 template <typename rna_structure_t>
134 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
136 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
138 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
139 "Only overloads that are marked noexcept are picked up by seqan3::is_pair_close().");
140 static_assert(
std::Same<
bool, decltype(impl(priority_tag<2>{}, chr))>,
141 "The return type of your is_pair_close() implementation must be 'bool'.");
143 return impl(priority_tag<2>{}, chr);
187 inline constexpr
auto is_pair_close = detail::adl::only::is_pair_close_fn{};
200 struct is_unpaired_fn
209 template <typename rna_structure_t>
211 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
213 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
215 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
216 "Only overloads that are marked noexcept are picked up by seqan3::is_unpaired().");
217 static_assert(
std::Same<
bool, decltype(impl(priority_tag<2>{}, chr))>,
218 "The return type of your is_unpaired() implementation must be 'bool'.");
220 return impl(priority_tag<2>{}, chr);
264 inline constexpr
auto is_unpaired = detail::adl::only::is_unpaired_fn{};
281 template <
typename alph_t,
283 seqan3::is_constexpr_default_constructible_v<remove_cvref_t<alph_t>>,
284 remove_cvref_t<alph_t>,
286 struct max_pseudoknot_depth_fn
295 template <
typename dummy =
int>
297 requires requires { { impl(priority_tag<2>{}, s_alph_t{}, dummy{}) }; }
299 constexpr
auto operator()() const noexcept
301 static_assert(noexcept(impl(priority_tag<2>{}, s_alph_t{})),
302 "Only overloads that are marked noexcept are picked up by seqan3::max_pseudoknot_depth.");
303 static_assert(
std::Constructible<
size_t, decltype(impl(priority_tag<2>{}, s_alph_t{}))>,
304 "The return type of your max_pseudoknot_depth implementation must be convertible to size_t.");
306 "Only overloads that are marked constexpr are picked up by seqan3::max_pseudoknot_depth.");
308 return impl(priority_tag<2>{}, s_alph_t{});
314 template <
typename alph_t>
315 requires requires { { max_pseudoknot_depth_fn<alph_t>{} }; }
316 inline constexpr
auto max_pseudoknot_depth_obj = max_pseudoknot_depth_fn<alph_t>{};
365 template <
typename alph_t>
367 requires requires { { detail::adl::only::max_pseudoknot_depth_fn<alph_t>{} }; } &&
368 requires { { detail::adl::only::max_pseudoknot_depth_obj<alph_t>() }; }
382 struct pseudoknot_id_fn
391 template <typename rna_structure_t>
393 requires requires (rna_structure_t
const chr) { { impl(priority_tag<2>{}, chr) }; }
395 constexpr
auto operator()(rna_structure_t
const chr)
const noexcept
397 static_assert(noexcept(impl(priority_tag<2>{}, chr)),
398 "Only overloads that are marked noexcept are picked up by seqan3::pseudoknot_id().");
400 "The return type of your pseudoknot_id() implementation must be convertible to std::optional<size_t>.");
402 return impl(priority_tag<2>{}, chr);
448 inline constexpr
auto pseudoknot_id = detail::adl::only::pseudoknot_id_fn{};
489 template <
typename t>
499 requires seqan3::max_pseudoknot_depth<t> > 0;
The generic alphabet concept that covers most data types used in ranges.
#define SEQAN3_CPO_IMPL(PRIO, TERM)
A macro that helps defining the overload set of a customisation point.
Definition: customisation_point.hpp:45
Definition: concept.hpp:32
The main SeqAn3 namespace.
#define SEQAN3_IS_CONSTEXPR(...)
Returns true if the expression passed to this macro can be evaluated at compile time, false otherwise.
Definition: function.hpp:25
Helper utilities for defining customisation point objects.
constexpr auto pseudoknot_id
Retrieve an id for the level of a pseudoknotted interaction (also known as 'page number').
Definition: concept.hpp:448
constexpr auto is_pair_close
Check whether the given character represents a leftward interaction in an RNA structure.
Definition: concept.hpp:187
constexpr auto is_pair_open
Check whether the given character represents a rightward interaction in an RNA structure.
Definition: concept.hpp:110
The std::Constructible concept specifies that a variable of type T can be initialized with the given ...
Provides C++20 additions to the type_traits header.
constexpr auto max_pseudoknot_depth
A type trait that holds the ability of the structure alphabet to represent pseudoknots, i.e. crossing interactions, up to a certain depth.
Definition: concept.hpp:370
The identity transformation (a TransformationTrait that returns the input).
Definition: type_traits:30
Core alphabet concept and free function/type trait wrappers.
A namespace for third party and standard library specialisations of SeqAn customisation points...
Definition: char.hpp:47
The concept std::Same<T, U> is satisfied if and only if T and U denote the same type.
constexpr auto is_unpaired
Check whether the given character represents an unpaired nucleotide in an RNA structure.
Definition: concept.hpp:264