1 /*
2   Copyright 2009 Andreas Biegert
3 
4   This file is part of the CS-BLAST package.
5 
6   The CS-BLAST package is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10 
11   The CS-BLAST package is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15 
16   You should have received a copy of the GNU General Public License
17   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "cs.h"
21 #include "as.h"
22 
23 namespace cs {
24 
25 // Size of AS62 alphabet
26 const size_t AS62::kSize = 62;
27 
28 // Size of AS62 alphabet including wildcard character ANY
29 const size_t AS62::kSizeAny = 63;
30 
31 // Integer code of ANY character
32 const uint8_t AS62::kAny = 62;
33 
34 // Integer code of GAP
35 const uint8_t AS62::kGap = 63;
36 
37 // Integer code of ENDGAP
38 const uint8_t AS62::kEndGap = 64;
39 
40 // For converting from ASCII to integer-based AS62-code
41 const uint8_t AS62::kCharToInt[] = {
42    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
43    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
44    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  62,   0,   0,  63,  63,   0,
45    0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   0,   0,   0,   0,   0,
46    0,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,
47   25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,   0,   0,   0,   0,   0,
48    0,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,
49   51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,   0,   0,   0,   0,
50    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
51    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
52    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
53    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
54    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
55    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
56    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
57    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
58 };
59 
60 // For converting from integer code back to ASCII character
61 const char AS62::kIntToChar[] = {
62  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
63  'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
64  'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
65  'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '*', '-',
66  '-'
67 };
68 
69 // For testing if ASCII character is from AS62 alphabet
70 const bool AS62::kValidChar[] = {
71  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
72  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
73  false, false, false, false, false, false, false, false, false, false,  true, false, false,  true,  true, false,
74   true,  true,  true,  true,  true,  true,  true,  true,  true,  true, false, false, false, false, false, false,
75  false,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
76   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true, false, false, false, false, false,
77  false,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
78   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true, false, false, false, false, false,
79  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
80  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
81  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
82  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
83  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
84  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
85  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
86  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
87 };
88 
89 
90 
91 // Size of AS90 alphabet
92 const size_t AS90::kSize = 90;
93 
94 // Size of AS90 alphabet including wildcard character ANY
95 const size_t AS90::kSizeAny = 91;
96 
97 // Integer code of ANY character
98 const uint8_t AS90::kAny = 90;
99 
100 // Integer code of GAP
101 const uint8_t AS90::kGap = 91;
102 
103 // Integer code of ENDGAP
104 const uint8_t AS90::kEndGap = 02;
105 
106 // For converting from ASCII to integer-based AS90-code
107 const uint8_t AS90::kCharToInt[] = {
108    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
109    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
110    0,   0,   1,   2,   3,   4,   5,   6,   7,   8,  90,   9,  10,  91,  91,  11,
111   12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,   0,  26,
112   27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
113   43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,
114   59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
115   75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
116    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
117    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
118    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
119    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
120    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
121    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
122    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
123    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
124 };
125 
126 // For converting from integer code back to ASCII character
127 const char AS90::kIntToChar[] = {
128  '!', '"', '#', '$', '%', '&', '\'', '(', ')', '+', ',', '/', '0', '1', '2', '3',
129  '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '?', '@', 'A', 'B', 'C', 'D',
130  'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
131  'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd',
132  'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
133  'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '*', '-', '-'
134 };
135 
136 // For testing if ASCII character is from AS90 alphabet
137 const bool AS90::kValidChar[] = {
138  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
139  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
140  false,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
141   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true, false,  true,
142   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
143   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
144   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
145   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true, false,
146  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
147  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
148  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
149  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
150  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
151  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
152  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
153  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false
154 };
155 
156 
157 
158 
159 // Size of AS219 alphabet
160 const size_t AS219::kSize = 219;
161 
162 // Size of AS219 alphabet including wildcard character ANY
163 const size_t AS219::kSizeAny = 220;
164 
165 // Integer code of ANY character
166 const uint8_t AS219::kAny = 219;
167 
168 // Integer code of GAP
169 const uint8_t AS219::kGap = 220;
170 
171 // Integer code of ENDGAP
172 const uint8_t AS219::kEndGap = 221;
173 
174 // For converting from ASCII to integer-based AS219-code
175 const uint8_t AS219::kCharToInt[] = {
176    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
177    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
178    0,   0,   1,   2,   3,   4,   5,   6,   7,   8, 219,   9,  10, 220, 220,  11,
179   12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,   0,  26,
180   27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
181   43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,
182   59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,
183   75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,
184   91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,
185  107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
186  123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
187  139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
188  155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
189  171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
190  187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
191  203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218
192 };
193 
194 // For converting from integer code back to ASCII character
195 const int AS219::kIntToChar[] = {
196   33,  34,  35,  36,  37,  38,  39,  40,  41,  43,  44,  47,  48,  49,  50,  51,
197   52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  63,  64,  65,  66,  67,  68,
198   69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,
199   85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100,
200  101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
201  117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
202  133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
203  149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
204  165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
205  181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
206  197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
207  213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
208  229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
209  245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,  42,  45,  45
210  // '\x21', '\x22', '\x23', '\x24', '\x25', '\x26', '\x27', '\x28', '\x29', '\x2B', '\x2C', '\x2F', '\x30', '\x31', '\x32', '\x33',
211  // '\x34', '\x35', '\x36', '\x37', '\x38', '\x39', '\x3A', '\x3B', '\x3C', '\x3D', '\x3F', '\x40', '\x41', '\x42', '\x43', '\x44',
212  // '\x45', '\x46', '\x47', '\x48', '\x49', '\x4A', '\x4B', '\x4C', '\x4D', '\x4E', '\x4F', '\x50', '\x51', '\x52', '\x53', '\x54',
213  // '\x55', '\x56', '\x57', '\x58', '\x59', '\x5A', '\x5B', '\x5C', '\x5D', '\x5E', '\x5F', '\x60', '\x61', '\x62', '\x63', '\x64',
214  // '\x65', '\x66', '\x67', '\x68', '\x69', '\x6A', '\x6B', '\x6C', '\x6D', '\x6E', '\x6F', '\x70', '\x71', '\x72', '\x73', '\x74',
215  // '\x75', '\x76', '\x77', '\x78', '\x79', '\x7A', '\x7B', '\x7C', '\x7D', '\x7E', '\x7F', '\x80', '\x81', '\x82', '\x83', '\x84',
216  // '\x85', '\x86', '\x87', '\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F', '\x90', '\x91', '\x92', '\x93', '\x94',
217  // '\x95', '\x96', '\x97', '\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F', '\xA0', '\xA1', '\xA2', '\xA3', '\xA4',
218  // '\xA5', '\xA6', '\xA7', '\xA8', '\xA9', '\xAA', '\xAB', '\xAC', '\xAD', '\xAE', '\xAF', '\xB0', '\xB1', '\xB2', '\xB3', '\xB4',
219  // '\xB5', '\xB6', '\xB7', '\xB8', '\xB9', '\xBA', '\xBB', '\xBC', '\xBD', '\xBE', '\xBF', '\xC0', '\xC1', '\xC2', '\xC3', '\xC4',
220  // '\xC5', '\xC6', '\xC7', '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF', '\xD0', '\xD1', '\xD2', '\xD3', '\xD4',
221  // '\xD5', '\xD6', '\xD7', '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF', '\xE0', '\xE1', '\xE2', '\xE3', '\xE4',
222  // '\xE5', '\xE6', '\xE7', '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF', '\xF0', '\xF1', '\xF2', '\xF3', '\xF4',
223  // '\xF5', '\xF6', '\xF7', '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF', '*', '-', '-'
224 };
225 
226 // For testing if ASCII character is from AS219 alphabet
227 const bool AS219::kValidChar[] = {
228  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
229  false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,
230  false,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
231   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true, false,  true,
232   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
233   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
234   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
235   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
236   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
237   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
238   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
239   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
240   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
241   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
242   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,
243   true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true,  true
244 };
245 
246 }  // namespace cs
247