1 // ==========================================================================
2 //                 SeqAn - The Library for Sequence Analysis
3 // ==========================================================================
4 // Copyright (c) 2006-2015, Knut Reinert, FU Berlin
5 // All rights reserved.
6 //
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are met:
9 //
10 //     * Redistributions of source code must retain the above copyright
11 //       notice, this list of conditions and the following disclaimer.
12 //     * Redistributions in binary form must reproduce the above copyright
13 //       notice, this list of conditions and the following disclaimer in the
14 //       documentation and/or other materials provided with the distribution.
15 //     * Neither the name of Knut Reinert or the FU Berlin nor the names of
16 //       its contributors may be used to endorse or promote products derived
17 //       from this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 // ARE DISCLAIMED. IN NO EVENT SHALL KNUT REINERT OR THE FU BERLIN BE LIABLE
23 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
29 // DAMAGE.
30 //
31 // ==========================================================================
32 // Author: Manuel Holtgrewe <manuel.holtgrewe@fu-berlin.de>
33 // ==========================================================================
34 // We put the tag definition into its own header so we can include them
35 // independently from the algorithms.
36 // ==========================================================================
37 
38 #ifndef SEQAN_INCLUDE_SEQAN_ALIGN_ALIGNMENT_ALGORITHM_TAGS_H_
39 #define SEQAN_INCLUDE_SEQAN_ALIGN_ALIGNMENT_ALGORITHM_TAGS_H_
40 
41 namespace seqan {
42 
43 // ============================================================================
44 // Forwards
45 // ============================================================================
46 
47 // ============================================================================
48 // Tags, Classes, Enums
49 // ============================================================================
50 
51 // ----------------------------------------------------------------------------
52 // Global Alignment Algorithm Tags
53 // ----------------------------------------------------------------------------
54 
55 /*!
56  * @defgroup AlignmentAlgorithmTags Alignment Algorithm Tags
57  * @brief Tags for selecting algorithms.
58  */
59 
60 // TODO(holtgrew): Rename MyersBitVector to Myers? Clashes with find module at the moment.
61 
62 /*!
63  * @tag AlignmentAlgorithmTags#Gotoh
64  * @headerfile <seqan/align.h>
65  * @brief Tag for selecting Gotoh DP algorithm.
66  *
67  * @signature struct Gotoh_;
68  * @signature typedef Tag<Gotoh_> Gotoh;
69  */
70 
71 struct Gotoh_;
72 typedef Tag<Gotoh_> Gotoh;
73 
74 /*!
75  * @tag AlignmentAlgorithmTags#NeedlemanWunsch
76  * @headerfile <seqan/align.h>
77  * @brief Tag for selecting NeedlemanWunsch DP algorithm.
78  *
79  * @signature struct Hirschberg_;
80  * @signature typedef Tag<Hirschberg_> NeedlemanWunsch;
81  */
82 
83 struct NeedlemanWunsch_;
84 typedef Tag<NeedlemanWunsch_> NeedlemanWunsch;
85 
86 /*!
87  * @tag AlignmentAlgorithmTags#Hirschberg
88  * @headerfile <seqan/align.h>
89  * @brief Tag for selecting Hirschberg's DP algorithm.
90  *
91  * @signature struct Hirschberg_;
92  * @signature typedef Tag<Hirschberg_> Hirschberg;
93  */
94 
95 struct Hirschberg_;
96 typedef Tag<Hirschberg_> Hirschberg;
97 
98 /*!
99  * @tag AlignmentAlgorithmTags#MyersBitVector
100  * @headerfile <seqan/align.h>
101  * @brief Tag for selecting Myers' bit-vector algorithm.
102  *
103  * @signature struct MyersBitVector_;
104  * @signature typedef Tag<MyersBitVector_> MyersBitVector;
105  */
106 
107 struct MyersBitVector_;
108 typedef Tag<MyersBitVector_> MyersBitVector;
109 
110 /*!
111  * @tag AlignmentAlgorithmTags#MyersHirschberg
112  * @headerfile <seqan/align.h>
113  * @brief Tag for selecting a combination of Myers' bit-vector algorithm with Hirschberg's algorithm.
114  *
115  * @signature struct MyersHirschberg_;
116  * @signature typedef Tag<MyersHirschberg_> MyersHirschberg;
117  */
118 
119 struct MyersHirschberg_;
120 typedef Tag<MyersHirschberg_> MyersHirschberg;
121 
122 // ----------------------------------------------------------------------------
123 // Local Alignment Algorithm Tags
124 // ----------------------------------------------------------------------------
125 
126 /*!
127  * @defgroup PairwiseLocalAlignmentAlgorithms Pairwise Local Alignment Algorithms
128  * @brief Tags for selecting algorithms.
129  */
130 
131 /*!
132  * @tag PairwiseLocalAlignmentAlgorithms#SmithWaterman
133  * @headerfile <seqan/align.h>
134  * @brief Tag for selecting the Smith-Waterman algorithm.
135  *
136  * @signature struct SmithWaterman_;
137  * @signature typedef Tag<SmithWaterman_> SmithWaterman;
138  */
139 
140 struct SmithWaterman_;
141 typedef Tag<SmithWaterman_> SmithWaterman;
142 
143 /*!
144  * @tag PairwiseLocalAlignmentAlgorithms#WatermanEggert
145  * @headerfile <seqan/align.h>
146  * @brief Tag for selecting the Waterman-Eggert algorithm.
147  *
148  * @signature struct WatermanEggert_;
149  * @signature typedef Tag<WatermanEggert_> WatermanEggert;
150  */
151 
152 struct WatermanEggert_;
153 typedef Tag<WatermanEggert_> WatermanEggert;
154 
155 // ============================================================================
156 // Metafunctions
157 // ============================================================================
158 
159 // ============================================================================
160 // Functions
161 // ============================================================================
162 
163 }  // namespace seqan
164 
165 #endif  // #ifndef SEQAN_INCLUDE_SEQAN_ALIGN_ALIGNMENT_ALGORITHM_TAGS_H_
166