Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / diaglist.h
1 #ifndef diaglist_h\r
2 #define diaglist_h\r
3 \r
4 const unsigned EMPTY = (unsigned) ~0;\r
5 const unsigned MAX_DIAGS = 1024;\r
6 \r
7 struct Diag\r
8         {\r
9         unsigned m_uStartPosA;\r
10         unsigned m_uStartPosB;\r
11         unsigned m_uLength;\r
12         };\r
13 \r
14 struct Rect\r
15         {\r
16         unsigned m_uStartPosA;\r
17         unsigned m_uStartPosB;\r
18         unsigned m_uLengthA;\r
19         unsigned m_uLengthB;\r
20         };\r
21 \r
22 class DiagList\r
23         {\r
24 public:\r
25         DiagList()\r
26                 {\r
27                 m_uCount = 0;\r
28                 }\r
29         ~DiagList()\r
30                 {\r
31                 Free();\r
32                 }\r
33 \r
34 public:\r
35 // Creation\r
36         void Clear()\r
37                 {\r
38                 Free();\r
39                 }\r
40         void FromPath(const PWPath &Path);\r
41         void Add(const Diag &d);\r
42         void Add(unsigned uStartPosA, unsigned uStartPosB, unsigned uLength);\r
43         void DeleteIncompatible();\r
44 \r
45 // Accessors\r
46         unsigned GetCount() const\r
47                 {\r
48                 return m_uCount;\r
49                 }\r
50         const Diag &Get(unsigned uIndex) const;\r
51 \r
52 // Operations\r
53         void Sort();\r
54         void Copy(const DiagList &DL);\r
55 \r
56 // Query\r
57         // returns true iff given diagonal is included in the list\r
58         // in whole or in part.\r
59         bool NonZeroIntersection(const Diag &d) const;\r
60         bool IsSorted() const;\r
61 \r
62 // Diagnostics\r
63         void LogMe() const;\r
64 \r
65 private:\r
66         void Free()\r
67                 {\r
68                 m_uCount = 0;\r
69                 }\r
70 \r
71 private:\r
72         unsigned m_uCount;\r
73         Diag m_Diags[MAX_DIAGS];\r
74         };\r
75 \r
76 unsigned DiagOverlap(const Diag &d1, const Diag &d2);\r
77 unsigned DiagOverlapA(const Diag &d1, const Diag &d2);\r
78 unsigned DiagOverlapB(const Diag &d1, const Diag &d2);\r
79 unsigned DiagBreak(const Diag &d1, const Diag &d2);\r
80 bool DiagCompatible(const Diag &d1, const Diag &d2);\r
81 void CheckDiags(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,\r
82   unsigned uLengthB, const MSA &msaA, const MSA &msaB, const PWPath &Path);\r
83 void FindDiags(const ProfPos *PX, unsigned uLengthX, const ProfPos *PY,\r
84   unsigned uLengthY, DiagList &DL);\r
85 void FindDiagsNuc(const ProfPos *PX, unsigned uLengthX, const ProfPos *PY,\r
86   unsigned uLengthY, DiagList &DL);\r
87 void MergeDiags(DiagList &DL);\r
88 \r
89 #endif // diaglist_h\r