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