SeqAn3  3.0.3
The Modern C++ library for sequence analysis.
pairwise_alignment_concept.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2021, Knut Reinert & MPI für molekulare Genetik
4 // This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5 // shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6 // -----------------------------------------------------------------------------------------------------
7 
13 #pragma once
14 
15 #include <tuple>
16 
18 #if SEQAN3_WORKAROUND_ISSUE_286
20 #endif // SEQAN3_WORKAROUND_ISSUE_286
22 
23 namespace seqan3::detail
24 {
25 
36 template <typename pairwise_alignment_t>
37 SEQAN3_CONCEPT pairwise_alignment =
39 #if SEQAN3_WORKAROUND_ISSUE_286
41  // simulate that tuple_element transfers const over to it's inner members.
42  transfer_type_modifier_onto_t<
44  std::tuple_element_t<0, std::remove_cvref_t<pairwise_alignment_t>>
45  >
46  > &&
48  // simulate that tuple_element transfers const over to it's inner members.
49  transfer_type_modifier_onto_t<
51  std::tuple_element_t<1, std::remove_cvref_t<pairwise_alignment_t>>
52  >
53  >;
54 #else // ^^^ workaround / no workaround vvv
57 #endif // SEQAN3_WORKAROUND_ISSUE_286
58 
60 
71 template <typename pairwise_alignment_t>
72 SEQAN3_CONCEPT writable_pairwise_alignment =
73  pairwise_alignment<pairwise_alignment_t> &&
74 #if SEQAN3_WORKAROUND_ISSUE_286
76  // simulate that tuple_element transfers const over to it's inner members.
77  transfer_type_modifier_onto_t<
79  std::tuple_element_t<0, std::remove_cvref_t<pairwise_alignment_t>>
80  >
81  > &&
83  // simulate that tuple_element transfers const over to it's inner members.
84  transfer_type_modifier_onto_t<
86  std::tuple_element_t<1, std::remove_cvref_t<pairwise_alignment_t>>
87  >
88  >;
89 #else // ^^^ workaround / no workaround vvv
92 #endif // SEQAN3_WORKAROUND_ISSUE_286
94 
95 } // namespace seqan3::detail
Includes the aligned_sequence and the related insert_gap and erase_gap functions to enable stl contai...
The generic concept for an aligned sequence.
Whether a type behaves like a tuple with exactly two elements.
The generic concept for an aligned sequence that is writable.
Provides type traits seqan3::detail::transfer_type_modifier_onto.
Provides seqan3::tuple_like.