SeqAn3 3.1.0
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
23namespace seqan3::detail
24{
25
36template <typename pairwise_alignment_t>
37SEQAN3_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
71template <typename pairwise_alignment_t>
72SEQAN3_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.