1// Copyright (c) 2017 Couchbase, Inc. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package vellum 16 17const maxCommon = 1<<6 - 1 18 19func encodeCommon(in byte) byte { 20 val := byte((int(commonInputs[in]) + 1) % 256) 21 if val > maxCommon { 22 return 0 23 } 24 return val 25} 26 27func decodeCommon(in byte) byte { 28 return commonInputsInv[in-1] 29} 30 31var commonInputs = []byte{ 32 84, // '\x00' 33 85, // '\x01' 34 86, // '\x02' 35 87, // '\x03' 36 88, // '\x04' 37 89, // '\x05' 38 90, // '\x06' 39 91, // '\x07' 40 92, // '\x08' 41 93, // '\t' 42 94, // '\n' 43 95, // '\x0b' 44 96, // '\x0c' 45 97, // '\r' 46 98, // '\x0e' 47 99, // '\x0f' 48 100, // '\x10' 49 101, // '\x11' 50 102, // '\x12' 51 103, // '\x13' 52 104, // '\x14' 53 105, // '\x15' 54 106, // '\x16' 55 107, // '\x17' 56 108, // '\x18' 57 109, // '\x19' 58 110, // '\x1a' 59 111, // '\x1b' 60 112, // '\x1c' 61 113, // '\x1d' 62 114, // '\x1e' 63 115, // '\x1f' 64 116, // ' ' 65 80, // '!' 66 117, // '"' 67 118, // '#' 68 79, // '$' 69 39, // '%' 70 30, // '&' 71 81, // "'" 72 75, // '(' 73 74, // ')' 74 82, // '*' 75 57, // '+' 76 66, // ',' 77 16, // '-' 78 12, // '.' 79 2, // '/' 80 19, // '0' 81 20, // '1' 82 21, // '2' 83 27, // '3' 84 32, // '4' 85 29, // '5' 86 35, // '6' 87 36, // '7' 88 37, // '8' 89 34, // '9' 90 24, // ':' 91 73, // ';' 92 119, // '<' 93 23, // '=' 94 120, // '>' 95 40, // '?' 96 83, // '@' 97 44, // 'A' 98 48, // 'B' 99 42, // 'C' 100 43, // 'D' 101 49, // 'E' 102 46, // 'F' 103 62, // 'G' 104 61, // 'H' 105 47, // 'I' 106 69, // 'J' 107 68, // 'K' 108 58, // 'L' 109 56, // 'M' 110 55, // 'N' 111 59, // 'O' 112 51, // 'P' 113 72, // 'Q' 114 54, // 'R' 115 45, // 'S' 116 52, // 'T' 117 64, // 'U' 118 65, // 'V' 119 63, // 'W' 120 71, // 'X' 121 67, // 'Y' 122 70, // 'Z' 123 77, // '[' 124 121, // '\\' 125 78, // ']' 126 122, // '^' 127 31, // '_' 128 123, // '`' 129 4, // 'a' 130 25, // 'b' 131 9, // 'c' 132 17, // 'd' 133 1, // 'e' 134 26, // 'f' 135 22, // 'g' 136 13, // 'h' 137 7, // 'i' 138 50, // 'j' 139 38, // 'k' 140 14, // 'l' 141 15, // 'm' 142 10, // 'n' 143 3, // 'o' 144 8, // 'p' 145 60, // 'q' 146 6, // 'r' 147 5, // 's' 148 0, // 't' 149 18, // 'u' 150 33, // 'v' 151 11, // 'w' 152 41, // 'x' 153 28, // 'y' 154 53, // 'z' 155 124, // '{' 156 125, // '|' 157 126, // '}' 158 76, // '~' 159 127, // '\x7f' 160 128, // '\x80' 161 129, // '\x81' 162 130, // '\x82' 163 131, // '\x83' 164 132, // '\x84' 165 133, // '\x85' 166 134, // '\x86' 167 135, // '\x87' 168 136, // '\x88' 169 137, // '\x89' 170 138, // '\x8a' 171 139, // '\x8b' 172 140, // '\x8c' 173 141, // '\x8d' 174 142, // '\x8e' 175 143, // '\x8f' 176 144, // '\x90' 177 145, // '\x91' 178 146, // '\x92' 179 147, // '\x93' 180 148, // '\x94' 181 149, // '\x95' 182 150, // '\x96' 183 151, // '\x97' 184 152, // '\x98' 185 153, // '\x99' 186 154, // '\x9a' 187 155, // '\x9b' 188 156, // '\x9c' 189 157, // '\x9d' 190 158, // '\x9e' 191 159, // '\x9f' 192 160, // '\xa0' 193 161, // '¡' 194 162, // '¢' 195 163, // '£' 196 164, // '¤' 197 165, // '¥' 198 166, // '¦' 199 167, // '§' 200 168, // '¨' 201 169, // '©' 202 170, // 'ª' 203 171, // '«' 204 172, // '¬' 205 173, // '\xad' 206 174, // '®' 207 175, // '¯' 208 176, // '°' 209 177, // '±' 210 178, // '²' 211 179, // '³' 212 180, // '´' 213 181, // 'µ' 214 182, // '¶' 215 183, // '·' 216 184, // '¸' 217 185, // '¹' 218 186, // 'º' 219 187, // '»' 220 188, // '¼' 221 189, // '½' 222 190, // '¾' 223 191, // '¿' 224 192, // 'À' 225 193, // 'Á' 226 194, // 'Â' 227 195, // 'Ã' 228 196, // 'Ä' 229 197, // 'Å' 230 198, // 'Æ' 231 199, // 'Ç' 232 200, // 'È' 233 201, // 'É' 234 202, // 'Ê' 235 203, // 'Ë' 236 204, // 'Ì' 237 205, // 'Í' 238 206, // 'Î' 239 207, // 'Ï' 240 208, // 'Ð' 241 209, // 'Ñ' 242 210, // 'Ò' 243 211, // 'Ó' 244 212, // 'Ô' 245 213, // 'Õ' 246 214, // 'Ö' 247 215, // '×' 248 216, // 'Ø' 249 217, // 'Ù' 250 218, // 'Ú' 251 219, // 'Û' 252 220, // 'Ü' 253 221, // 'Ý' 254 222, // 'Þ' 255 223, // 'ß' 256 224, // 'à' 257 225, // 'á' 258 226, // 'â' 259 227, // 'ã' 260 228, // 'ä' 261 229, // 'å' 262 230, // 'æ' 263 231, // 'ç' 264 232, // 'è' 265 233, // 'é' 266 234, // 'ê' 267 235, // 'ë' 268 236, // 'ì' 269 237, // 'í' 270 238, // 'î' 271 239, // 'ï' 272 240, // 'ð' 273 241, // 'ñ' 274 242, // 'ò' 275 243, // 'ó' 276 244, // 'ô' 277 245, // 'õ' 278 246, // 'ö' 279 247, // '÷' 280 248, // 'ø' 281 249, // 'ù' 282 250, // 'ú' 283 251, // 'û' 284 252, // 'ü' 285 253, // 'ý' 286 254, // 'þ' 287 255, // 'ÿ' 288} 289 290var commonInputsInv = []byte{ 291 't', 292 'e', 293 '/', 294 'o', 295 'a', 296 's', 297 'r', 298 'i', 299 'p', 300 'c', 301 'n', 302 'w', 303 '.', 304 'h', 305 'l', 306 'm', 307 '-', 308 'd', 309 'u', 310 '0', 311 '1', 312 '2', 313 'g', 314 '=', 315 ':', 316 'b', 317 'f', 318 '3', 319 'y', 320 '5', 321 '&', 322 '_', 323 '4', 324 'v', 325 '9', 326 '6', 327 '7', 328 '8', 329 'k', 330 '%', 331 '?', 332 'x', 333 'C', 334 'D', 335 'A', 336 'S', 337 'F', 338 'I', 339 'B', 340 'E', 341 'j', 342 'P', 343 'T', 344 'z', 345 'R', 346 'N', 347 'M', 348 '+', 349 'L', 350 'O', 351 'q', 352 'H', 353 'G', 354 'W', 355 'U', 356 'V', 357 ',', 358 'Y', 359 'K', 360 'J', 361 'Z', 362 'X', 363 'Q', 364 ';', 365 ')', 366 '(', 367 '~', 368 '[', 369 ']', 370 '$', 371 '!', 372 '\'', 373 '*', 374 '@', 375 '\x00', 376 '\x01', 377 '\x02', 378 '\x03', 379 '\x04', 380 '\x05', 381 '\x06', 382 '\x07', 383 '\x08', 384 '\t', 385 '\n', 386 '\x0b', 387 '\x0c', 388 '\r', 389 '\x0e', 390 '\x0f', 391 '\x10', 392 '\x11', 393 '\x12', 394 '\x13', 395 '\x14', 396 '\x15', 397 '\x16', 398 '\x17', 399 '\x18', 400 '\x19', 401 '\x1a', 402 '\x1b', 403 '\x1c', 404 '\x1d', 405 '\x1e', 406 '\x1f', 407 ' ', 408 '"', 409 '#', 410 '<', 411 '>', 412 '\\', 413 '^', 414 '`', 415 '{', 416 '|', 417 '}', 418 '\x7f', 419 '\x80', 420 '\x81', 421 '\x82', 422 '\x83', 423 '\x84', 424 '\x85', 425 '\x86', 426 '\x87', 427 '\x88', 428 '\x89', 429 '\x8a', 430 '\x8b', 431 '\x8c', 432 '\x8d', 433 '\x8e', 434 '\x8f', 435 '\x90', 436 '\x91', 437 '\x92', 438 '\x93', 439 '\x94', 440 '\x95', 441 '\x96', 442 '\x97', 443 '\x98', 444 '\x99', 445 '\x9a', 446 '\x9b', 447 '\x9c', 448 '\x9d', 449 '\x9e', 450 '\x9f', 451 '\xa0', 452 '\xa1', 453 '\xa2', 454 '\xa3', 455 '\xa4', 456 '\xa5', 457 '\xa6', 458 '\xa7', 459 '\xa8', 460 '\xa9', 461 '\xaa', 462 '\xab', 463 '\xac', 464 '\xad', 465 '\xae', 466 '\xaf', 467 '\xb0', 468 '\xb1', 469 '\xb2', 470 '\xb3', 471 '\xb4', 472 '\xb5', 473 '\xb6', 474 '\xb7', 475 '\xb8', 476 '\xb9', 477 '\xba', 478 '\xbb', 479 '\xbc', 480 '\xbd', 481 '\xbe', 482 '\xbf', 483 '\xc0', 484 '\xc1', 485 '\xc2', 486 '\xc3', 487 '\xc4', 488 '\xc5', 489 '\xc6', 490 '\xc7', 491 '\xc8', 492 '\xc9', 493 '\xca', 494 '\xcb', 495 '\xcc', 496 '\xcd', 497 '\xce', 498 '\xcf', 499 '\xd0', 500 '\xd1', 501 '\xd2', 502 '\xd3', 503 '\xd4', 504 '\xd5', 505 '\xd6', 506 '\xd7', 507 '\xd8', 508 '\xd9', 509 '\xda', 510 '\xdb', 511 '\xdc', 512 '\xdd', 513 '\xde', 514 '\xdf', 515 '\xe0', 516 '\xe1', 517 '\xe2', 518 '\xe3', 519 '\xe4', 520 '\xe5', 521 '\xe6', 522 '\xe7', 523 '\xe8', 524 '\xe9', 525 '\xea', 526 '\xeb', 527 '\xec', 528 '\xed', 529 '\xee', 530 '\xef', 531 '\xf0', 532 '\xf1', 533 '\xf2', 534 '\xf3', 535 '\xf4', 536 '\xf5', 537 '\xf6', 538 '\xf7', 539 '\xf8', 540 '\xf9', 541 '\xfa', 542 '\xfb', 543 '\xfc', 544 '\xfd', 545 '\xfe', 546 '\xff', 547} 548