26 namespace seqan3::detail::adl_only
30 template <
typename ...args_t>
36 struct is_pair_open_cpo :
public detail::customisation_point_object<is_pair_open_cpo, 2>
39 using base_t = detail::customisation_point_object<is_pair_open_cpo, 2>;
47 template <
typename alphabet_t>
57 template <
typename alphabet_t>
67 template <
typename alphabet_t>
70 std::forward<alphabet_t>(
alphabet).is_pair_open() ==
true
109 inline constexpr
auto is_pair_open = detail::adl_only::is_pair_open_cpo{};
117 namespace seqan3::detail::adl_only
121 template <
typename ...args_t>
127 struct is_pair_close_cpo :
public detail::customisation_point_object<is_pair_close_cpo, 2>
130 using base_t = detail::customisation_point_object<is_pair_close_cpo, 2>;
132 using base_t::base_t;
138 template <
typename alphabet_t>
148 template <
typename alphabet_t>
158 template <
typename alphabet_t>
161 std::forward<alphabet_t>(
alphabet).is_pair_close() ==
true
200 inline constexpr
auto is_pair_close = detail::adl_only::is_pair_close_cpo{};
208 namespace seqan3::detail::adl_only
212 template <
typename ...args_t>
218 struct is_unpaired_cpo :
public detail::customisation_point_object<is_unpaired_cpo, 2>
221 using base_t = detail::customisation_point_object<is_unpaired_cpo, 2>;
223 using base_t::base_t;
229 template <
typename alphabet_t>
239 template <
typename alphabet_t>
249 template <
typename alphabet_t>
252 std::forward<alphabet_t>(
alphabet).is_unpaired() ==
true
291 inline constexpr
auto is_unpaired = detail::adl_only::is_unpaired_cpo{};
299 namespace seqan3::detail::adl_only
303 template <
typename ...args_t>
310 template <
typename alphabet_t>
311 struct max_pseudoknot_depth_cpo :
public detail::customisation_point_object<max_pseudoknot_depth_cpo<alphabet_t>, 2>
314 using base_t = detail::customisation_point_object<max_pseudoknot_depth_cpo<alphabet_t>, 2>;
316 using base_t::base_t;
321 template <
typename alphabet_type>
322 using alphabet_or_type_identity
323 = std::conditional_t<std::is_nothrow_default_constructible_v<std::remove_cvref_t<alphabet_type>> &&
324 seqan3::is_constexpr_default_constructible_v<std::remove_cvref_t<alphabet_type>>,
331 template <
typename alphabet_type = alphabet_t>
346 template <
typename alphabet_type = alphabet_t>
355 template <
typename alphabet_type = alphabet_t>
362 #if SEQAN3_WORKAROUND_GCC_89953
363 template <
typename alph_t>
364 requires requires { { max_pseudoknot_depth_cpo<alph_t>{} }; }
365 inline constexpr
auto max_pseudoknot_depth_obj = max_pseudoknot_depth_cpo<alph_t>{};
412 #if SEQAN3_WORKAROUND_GCC_89953
413 template <
typename alph_t>
415 requires requires { { detail::adl_only::max_pseudoknot_depth_cpo<alph_t>{} }; } &&
416 requires { { detail::adl_only::max_pseudoknot_depth_obj<alph_t>() }; }
418 inline constexpr
auto max_pseudoknot_depth = detail::adl_only::max_pseudoknot_depth_obj<alph_t>();
420 template <
typename alph_t>
422 requires requires { { detail::adl_only::max_pseudoknot_depth_cpo<alph_t>{}() }; }
424 inline constexpr
auto max_pseudoknot_depth = detail::adl_only::max_pseudoknot_depth_cpo<alph_t>{}();
433 namespace seqan3::detail::adl_only
437 template <
typename ...args_t>
442 struct pseudoknot_id_cpo :
public detail::customisation_point_object<pseudoknot_id_cpo, 2>
445 using base_t = detail::customisation_point_object<pseudoknot_id_cpo, 2>;
447 using base_t::base_t;
453 template <
typename alphabet_t>
463 template <
typename alphabet_t>
473 template <
typename alphabet_t>
476 std::forward<alphabet_t>(
alphabet).pseudoknot_id()
517 inline constexpr
auto pseudoknot_id = detail::adl_only::pseudoknot_id_cpo{};
560 template <
typename t>
569 requires seqan3::max_pseudoknot_depth<t> > 0;
Core alphabet concept and free function/type trait wrappers.
Helper utilities for defining customisation point objects (CPOs).
#define SEQAN3_CPO_OVERLOAD(...)
A macro that helps to define a seqan3::detail::customisation_point_object.
Definition: customisation_point.hpp:102
constexpr auto is_unpaired
Check whether the given character represents an unpaired nucleotide in an RNA structure.
Definition: concept.hpp:264
constexpr auto pseudoknot_id
Retrieve an id for the level of a pseudoknotted interaction (also known as 'page number').
Definition: concept.hpp:472
constexpr auto is_pair_close
Check whether the given character represents a leftward interaction in an RNA structure.
Definition: concept.hpp:182
constexpr auto max_pseudoknot_depth
A type trait that holds the ability of the structure alphabet to represent pseudoknots,...
Definition: concept.hpp:388
constexpr auto is_pair_open
Check whether the given character represents a rightward interaction in an RNA structure.
Definition: concept.hpp:100
The generic alphabet concept that covers most data types used in ranges.
A concept that indicates whether an alphabet represents RNA structure.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
typename remove_cvref< t >::type remove_cvref_t
Return the input type with const, volatile and references removed (transformation_trait shortcut).
Definition: type_traits:54
A type that can be specialised to provide customisation point implementations so that third party typ...
Definition: concept.hpp:49
The identity transformation (a transformation_trait that returns the input).
Definition: type_traits:71
Provides C++20 additions to the type_traits header.