Next version of JABA
[jabaws.git] / binaries / src / muscle / seq.h
1 #ifndef Seq_h\r
2 #define Seq_h\r
3 \r
4 #include <vector>\r
5 \r
6 class TextFile;\r
7 class MSA;\r
8 \r
9 typedef std::vector<char> CharVect;\r
10 \r
11 class Seq : public CharVect\r
12         {\r
13 public:\r
14         Seq()\r
15                 {\r
16                 m_ptrName = 0;\r
17         // Start with moderate size to avoid\r
18         // thrashing the heap.\r
19                 reserve(200);\r
20                 }\r
21         virtual ~Seq()\r
22                 {\r
23                 delete[] m_ptrName;\r
24                 }\r
25 \r
26 private:\r
27 // Not implemented; prevent use of copy c'tor and assignment.\r
28         Seq(const Seq &);\r
29         Seq &operator=(const Seq &);\r
30 \r
31 public:\r
32         void Clear()\r
33                 {\r
34                 clear();\r
35                 delete[] m_ptrName;\r
36                 m_ptrName = 0;\r
37                 m_uId = uInsane;\r
38                 }\r
39         const char *GetName() const\r
40                 {\r
41                 return m_ptrName;\r
42                 }\r
43         unsigned GetId() const\r
44                 {\r
45                 if (uInsane == m_uId)\r
46                         Quit("Seq::GetId, id not set");\r
47                 return m_uId;\r
48                 }\r
49         void SetId(unsigned uId) { m_uId = uId; }\r
50 \r
51         bool FromFASTAFile(TextFile &File);\r
52         void ToFASTAFile(TextFile &File) const;\r
53         void ExtractUngapped(MSA &msa) const;\r
54 \r
55         void FromString(const char *pstrSeq, const char *pstrName);\r
56         void Copy(const Seq &rhs);\r
57         void CopyReversed(const Seq &rhs);\r
58         void StripGaps();\r
59         void StripGapsAndWhitespace();\r
60         void ToUpper();\r
61         void SetName(const char *ptrName);\r
62         unsigned GetLetter(unsigned uIndex) const;\r
63         unsigned Length() const { return (unsigned) size(); }\r
64         bool Eq(const Seq &s) const;\r
65         bool EqIgnoreCase(const Seq &s) const;\r
66         bool EqIgnoreCaseAndGaps(const Seq &s) const;\r
67         bool HasGap() const;\r
68         unsigned GetUngappedLength() const;\r
69         void LogMe() const;\r
70         char GetChar(unsigned uIndex) const { return operator[](uIndex); }\r
71         void SetChar(unsigned uIndex, char c) { operator[](uIndex) = c; }\r
72         void AppendChar(char c) { push_back(c); }\r
73         void FixAlpha();\r
74 \r
75 #ifndef _WIN32\r
76         reference at(size_type i) { return operator[](i); }\r
77         const_reference at(size_type i) const { return operator[](i); }\r
78 #endif\r
79 \r
80 private:\r
81         char *m_ptrName;\r
82         unsigned m_uId;\r
83         };\r
84 \r
85 #endif  // Seq.h\r