You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							547 lines
						
					
					
						
							6.4 KiB
						
					
					
				
			
		
		
	
	
							547 lines
						
					
					
						
							6.4 KiB
						
					
					
				| //  Copyright (c) 2017 Couchbase, Inc.
 | |
| //
 | |
| // Licensed under the Apache License, Version 2.0 (the "License");
 | |
| // you may not use this file except in compliance with the License.
 | |
| // You may obtain a copy of the License at
 | |
| //
 | |
| // 		http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing, software
 | |
| // distributed under the License is distributed on an "AS IS" BASIS,
 | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| // See the License for the specific language governing permissions and
 | |
| // limitations under the License.
 | |
| 
 | |
| package vellum
 | |
| 
 | |
| const maxCommon = 1<<6 - 1
 | |
| 
 | |
| func encodeCommon(in byte) byte {
 | |
| 	val := byte((int(commonInputs[in]) + 1) % 256)
 | |
| 	if val > maxCommon {
 | |
| 		return 0
 | |
| 	}
 | |
| 	return val
 | |
| }
 | |
| 
 | |
| func decodeCommon(in byte) byte {
 | |
| 	return commonInputsInv[in-1]
 | |
| }
 | |
| 
 | |
| var commonInputs = []byte{
 | |
| 	84,  // '\x00'
 | |
| 	85,  // '\x01'
 | |
| 	86,  // '\x02'
 | |
| 	87,  // '\x03'
 | |
| 	88,  // '\x04'
 | |
| 	89,  // '\x05'
 | |
| 	90,  // '\x06'
 | |
| 	91,  // '\x07'
 | |
| 	92,  // '\x08'
 | |
| 	93,  // '\t'
 | |
| 	94,  // '\n'
 | |
| 	95,  // '\x0b'
 | |
| 	96,  // '\x0c'
 | |
| 	97,  // '\r'
 | |
| 	98,  // '\x0e'
 | |
| 	99,  // '\x0f'
 | |
| 	100, // '\x10'
 | |
| 	101, // '\x11'
 | |
| 	102, // '\x12'
 | |
| 	103, // '\x13'
 | |
| 	104, // '\x14'
 | |
| 	105, // '\x15'
 | |
| 	106, // '\x16'
 | |
| 	107, // '\x17'
 | |
| 	108, // '\x18'
 | |
| 	109, // '\x19'
 | |
| 	110, // '\x1a'
 | |
| 	111, // '\x1b'
 | |
| 	112, // '\x1c'
 | |
| 	113, // '\x1d'
 | |
| 	114, // '\x1e'
 | |
| 	115, // '\x1f'
 | |
| 	116, // ' '
 | |
| 	80,  // '!'
 | |
| 	117, // '"'
 | |
| 	118, // '#'
 | |
| 	79,  // '$'
 | |
| 	39,  // '%'
 | |
| 	30,  // '&'
 | |
| 	81,  // "'"
 | |
| 	75,  // '('
 | |
| 	74,  // ')'
 | |
| 	82,  // '*'
 | |
| 	57,  // '+'
 | |
| 	66,  // ','
 | |
| 	16,  // '-'
 | |
| 	12,  // '.'
 | |
| 	2,   // '/'
 | |
| 	19,  // '0'
 | |
| 	20,  // '1'
 | |
| 	21,  // '2'
 | |
| 	27,  // '3'
 | |
| 	32,  // '4'
 | |
| 	29,  // '5'
 | |
| 	35,  // '6'
 | |
| 	36,  // '7'
 | |
| 	37,  // '8'
 | |
| 	34,  // '9'
 | |
| 	24,  // ':'
 | |
| 	73,  // ';'
 | |
| 	119, // '<'
 | |
| 	23,  // '='
 | |
| 	120, // '>'
 | |
| 	40,  // '?'
 | |
| 	83,  // '@'
 | |
| 	44,  // 'A'
 | |
| 	48,  // 'B'
 | |
| 	42,  // 'C'
 | |
| 	43,  // 'D'
 | |
| 	49,  // 'E'
 | |
| 	46,  // 'F'
 | |
| 	62,  // 'G'
 | |
| 	61,  // 'H'
 | |
| 	47,  // 'I'
 | |
| 	69,  // 'J'
 | |
| 	68,  // 'K'
 | |
| 	58,  // 'L'
 | |
| 	56,  // 'M'
 | |
| 	55,  // 'N'
 | |
| 	59,  // 'O'
 | |
| 	51,  // 'P'
 | |
| 	72,  // 'Q'
 | |
| 	54,  // 'R'
 | |
| 	45,  // 'S'
 | |
| 	52,  // 'T'
 | |
| 	64,  // 'U'
 | |
| 	65,  // 'V'
 | |
| 	63,  // 'W'
 | |
| 	71,  // 'X'
 | |
| 	67,  // 'Y'
 | |
| 	70,  // 'Z'
 | |
| 	77,  // '['
 | |
| 	121, // '\\'
 | |
| 	78,  // ']'
 | |
| 	122, // '^'
 | |
| 	31,  // '_'
 | |
| 	123, // '`'
 | |
| 	4,   // 'a'
 | |
| 	25,  // 'b'
 | |
| 	9,   // 'c'
 | |
| 	17,  // 'd'
 | |
| 	1,   // 'e'
 | |
| 	26,  // 'f'
 | |
| 	22,  // 'g'
 | |
| 	13,  // 'h'
 | |
| 	7,   // 'i'
 | |
| 	50,  // 'j'
 | |
| 	38,  // 'k'
 | |
| 	14,  // 'l'
 | |
| 	15,  // 'm'
 | |
| 	10,  // 'n'
 | |
| 	3,   // 'o'
 | |
| 	8,   // 'p'
 | |
| 	60,  // 'q'
 | |
| 	6,   // 'r'
 | |
| 	5,   // 's'
 | |
| 	0,   // 't'
 | |
| 	18,  // 'u'
 | |
| 	33,  // 'v'
 | |
| 	11,  // 'w'
 | |
| 	41,  // 'x'
 | |
| 	28,  // 'y'
 | |
| 	53,  // 'z'
 | |
| 	124, // '{'
 | |
| 	125, // '|'
 | |
| 	126, // '}'
 | |
| 	76,  // '~'
 | |
| 	127, // '\x7f'
 | |
| 	128, // '\x80'
 | |
| 	129, // '\x81'
 | |
| 	130, // '\x82'
 | |
| 	131, // '\x83'
 | |
| 	132, // '\x84'
 | |
| 	133, // '\x85'
 | |
| 	134, // '\x86'
 | |
| 	135, // '\x87'
 | |
| 	136, // '\x88'
 | |
| 	137, // '\x89'
 | |
| 	138, // '\x8a'
 | |
| 	139, // '\x8b'
 | |
| 	140, // '\x8c'
 | |
| 	141, // '\x8d'
 | |
| 	142, // '\x8e'
 | |
| 	143, // '\x8f'
 | |
| 	144, // '\x90'
 | |
| 	145, // '\x91'
 | |
| 	146, // '\x92'
 | |
| 	147, // '\x93'
 | |
| 	148, // '\x94'
 | |
| 	149, // '\x95'
 | |
| 	150, // '\x96'
 | |
| 	151, // '\x97'
 | |
| 	152, // '\x98'
 | |
| 	153, // '\x99'
 | |
| 	154, // '\x9a'
 | |
| 	155, // '\x9b'
 | |
| 	156, // '\x9c'
 | |
| 	157, // '\x9d'
 | |
| 	158, // '\x9e'
 | |
| 	159, // '\x9f'
 | |
| 	160, // '\xa0'
 | |
| 	161, // '¡'
 | |
| 	162, // '¢'
 | |
| 	163, // '£'
 | |
| 	164, // '¤'
 | |
| 	165, // '¥'
 | |
| 	166, // '¦'
 | |
| 	167, // '§'
 | |
| 	168, // '¨'
 | |
| 	169, // '©'
 | |
| 	170, // 'ª'
 | |
| 	171, // '«'
 | |
| 	172, // '¬'
 | |
| 	173, // '\xad'
 | |
| 	174, // '®'
 | |
| 	175, // '¯'
 | |
| 	176, // '°'
 | |
| 	177, // '±'
 | |
| 	178, // '²'
 | |
| 	179, // '³'
 | |
| 	180, // '´'
 | |
| 	181, // 'µ'
 | |
| 	182, // '¶'
 | |
| 	183, // '·'
 | |
| 	184, // '¸'
 | |
| 	185, // '¹'
 | |
| 	186, // 'º'
 | |
| 	187, // '»'
 | |
| 	188, // '¼'
 | |
| 	189, // '½'
 | |
| 	190, // '¾'
 | |
| 	191, // '¿'
 | |
| 	192, // 'À'
 | |
| 	193, // 'Á'
 | |
| 	194, // 'Â'
 | |
| 	195, // 'Ã'
 | |
| 	196, // 'Ä'
 | |
| 	197, // 'Å'
 | |
| 	198, // 'Æ'
 | |
| 	199, // 'Ç'
 | |
| 	200, // 'È'
 | |
| 	201, // 'É'
 | |
| 	202, // 'Ê'
 | |
| 	203, // 'Ë'
 | |
| 	204, // 'Ì'
 | |
| 	205, // 'Í'
 | |
| 	206, // 'Î'
 | |
| 	207, // 'Ï'
 | |
| 	208, // 'Ð'
 | |
| 	209, // 'Ñ'
 | |
| 	210, // 'Ò'
 | |
| 	211, // 'Ó'
 | |
| 	212, // 'Ô'
 | |
| 	213, // 'Õ'
 | |
| 	214, // 'Ö'
 | |
| 	215, // '×'
 | |
| 	216, // 'Ø'
 | |
| 	217, // 'Ù'
 | |
| 	218, // 'Ú'
 | |
| 	219, // 'Û'
 | |
| 	220, // 'Ü'
 | |
| 	221, // 'Ý'
 | |
| 	222, // 'Þ'
 | |
| 	223, // 'ß'
 | |
| 	224, // 'à'
 | |
| 	225, // 'á'
 | |
| 	226, // 'â'
 | |
| 	227, // 'ã'
 | |
| 	228, // 'ä'
 | |
| 	229, // 'å'
 | |
| 	230, // 'æ'
 | |
| 	231, // 'ç'
 | |
| 	232, // 'è'
 | |
| 	233, // 'é'
 | |
| 	234, // 'ê'
 | |
| 	235, // 'ë'
 | |
| 	236, // 'ì'
 | |
| 	237, // 'í'
 | |
| 	238, // 'î'
 | |
| 	239, // 'ï'
 | |
| 	240, // 'ð'
 | |
| 	241, // 'ñ'
 | |
| 	242, // 'ò'
 | |
| 	243, // 'ó'
 | |
| 	244, // 'ô'
 | |
| 	245, // 'õ'
 | |
| 	246, // 'ö'
 | |
| 	247, // '÷'
 | |
| 	248, // 'ø'
 | |
| 	249, // 'ù'
 | |
| 	250, // 'ú'
 | |
| 	251, // 'û'
 | |
| 	252, // 'ü'
 | |
| 	253, // 'ý'
 | |
| 	254, // 'þ'
 | |
| 	255, // 'ÿ'
 | |
| }
 | |
| 
 | |
| var commonInputsInv = []byte{
 | |
| 	't',
 | |
| 	'e',
 | |
| 	'/',
 | |
| 	'o',
 | |
| 	'a',
 | |
| 	's',
 | |
| 	'r',
 | |
| 	'i',
 | |
| 	'p',
 | |
| 	'c',
 | |
| 	'n',
 | |
| 	'w',
 | |
| 	'.',
 | |
| 	'h',
 | |
| 	'l',
 | |
| 	'm',
 | |
| 	'-',
 | |
| 	'd',
 | |
| 	'u',
 | |
| 	'0',
 | |
| 	'1',
 | |
| 	'2',
 | |
| 	'g',
 | |
| 	'=',
 | |
| 	':',
 | |
| 	'b',
 | |
| 	'f',
 | |
| 	'3',
 | |
| 	'y',
 | |
| 	'5',
 | |
| 	'&',
 | |
| 	'_',
 | |
| 	'4',
 | |
| 	'v',
 | |
| 	'9',
 | |
| 	'6',
 | |
| 	'7',
 | |
| 	'8',
 | |
| 	'k',
 | |
| 	'%',
 | |
| 	'?',
 | |
| 	'x',
 | |
| 	'C',
 | |
| 	'D',
 | |
| 	'A',
 | |
| 	'S',
 | |
| 	'F',
 | |
| 	'I',
 | |
| 	'B',
 | |
| 	'E',
 | |
| 	'j',
 | |
| 	'P',
 | |
| 	'T',
 | |
| 	'z',
 | |
| 	'R',
 | |
| 	'N',
 | |
| 	'M',
 | |
| 	'+',
 | |
| 	'L',
 | |
| 	'O',
 | |
| 	'q',
 | |
| 	'H',
 | |
| 	'G',
 | |
| 	'W',
 | |
| 	'U',
 | |
| 	'V',
 | |
| 	',',
 | |
| 	'Y',
 | |
| 	'K',
 | |
| 	'J',
 | |
| 	'Z',
 | |
| 	'X',
 | |
| 	'Q',
 | |
| 	';',
 | |
| 	')',
 | |
| 	'(',
 | |
| 	'~',
 | |
| 	'[',
 | |
| 	']',
 | |
| 	'$',
 | |
| 	'!',
 | |
| 	'\'',
 | |
| 	'*',
 | |
| 	'@',
 | |
| 	'\x00',
 | |
| 	'\x01',
 | |
| 	'\x02',
 | |
| 	'\x03',
 | |
| 	'\x04',
 | |
| 	'\x05',
 | |
| 	'\x06',
 | |
| 	'\x07',
 | |
| 	'\x08',
 | |
| 	'\t',
 | |
| 	'\n',
 | |
| 	'\x0b',
 | |
| 	'\x0c',
 | |
| 	'\r',
 | |
| 	'\x0e',
 | |
| 	'\x0f',
 | |
| 	'\x10',
 | |
| 	'\x11',
 | |
| 	'\x12',
 | |
| 	'\x13',
 | |
| 	'\x14',
 | |
| 	'\x15',
 | |
| 	'\x16',
 | |
| 	'\x17',
 | |
| 	'\x18',
 | |
| 	'\x19',
 | |
| 	'\x1a',
 | |
| 	'\x1b',
 | |
| 	'\x1c',
 | |
| 	'\x1d',
 | |
| 	'\x1e',
 | |
| 	'\x1f',
 | |
| 	' ',
 | |
| 	'"',
 | |
| 	'#',
 | |
| 	'<',
 | |
| 	'>',
 | |
| 	'\\',
 | |
| 	'^',
 | |
| 	'`',
 | |
| 	'{',
 | |
| 	'|',
 | |
| 	'}',
 | |
| 	'\x7f',
 | |
| 	'\x80',
 | |
| 	'\x81',
 | |
| 	'\x82',
 | |
| 	'\x83',
 | |
| 	'\x84',
 | |
| 	'\x85',
 | |
| 	'\x86',
 | |
| 	'\x87',
 | |
| 	'\x88',
 | |
| 	'\x89',
 | |
| 	'\x8a',
 | |
| 	'\x8b',
 | |
| 	'\x8c',
 | |
| 	'\x8d',
 | |
| 	'\x8e',
 | |
| 	'\x8f',
 | |
| 	'\x90',
 | |
| 	'\x91',
 | |
| 	'\x92',
 | |
| 	'\x93',
 | |
| 	'\x94',
 | |
| 	'\x95',
 | |
| 	'\x96',
 | |
| 	'\x97',
 | |
| 	'\x98',
 | |
| 	'\x99',
 | |
| 	'\x9a',
 | |
| 	'\x9b',
 | |
| 	'\x9c',
 | |
| 	'\x9d',
 | |
| 	'\x9e',
 | |
| 	'\x9f',
 | |
| 	'\xa0',
 | |
| 	'\xa1',
 | |
| 	'\xa2',
 | |
| 	'\xa3',
 | |
| 	'\xa4',
 | |
| 	'\xa5',
 | |
| 	'\xa6',
 | |
| 	'\xa7',
 | |
| 	'\xa8',
 | |
| 	'\xa9',
 | |
| 	'\xaa',
 | |
| 	'\xab',
 | |
| 	'\xac',
 | |
| 	'\xad',
 | |
| 	'\xae',
 | |
| 	'\xaf',
 | |
| 	'\xb0',
 | |
| 	'\xb1',
 | |
| 	'\xb2',
 | |
| 	'\xb3',
 | |
| 	'\xb4',
 | |
| 	'\xb5',
 | |
| 	'\xb6',
 | |
| 	'\xb7',
 | |
| 	'\xb8',
 | |
| 	'\xb9',
 | |
| 	'\xba',
 | |
| 	'\xbb',
 | |
| 	'\xbc',
 | |
| 	'\xbd',
 | |
| 	'\xbe',
 | |
| 	'\xbf',
 | |
| 	'\xc0',
 | |
| 	'\xc1',
 | |
| 	'\xc2',
 | |
| 	'\xc3',
 | |
| 	'\xc4',
 | |
| 	'\xc5',
 | |
| 	'\xc6',
 | |
| 	'\xc7',
 | |
| 	'\xc8',
 | |
| 	'\xc9',
 | |
| 	'\xca',
 | |
| 	'\xcb',
 | |
| 	'\xcc',
 | |
| 	'\xcd',
 | |
| 	'\xce',
 | |
| 	'\xcf',
 | |
| 	'\xd0',
 | |
| 	'\xd1',
 | |
| 	'\xd2',
 | |
| 	'\xd3',
 | |
| 	'\xd4',
 | |
| 	'\xd5',
 | |
| 	'\xd6',
 | |
| 	'\xd7',
 | |
| 	'\xd8',
 | |
| 	'\xd9',
 | |
| 	'\xda',
 | |
| 	'\xdb',
 | |
| 	'\xdc',
 | |
| 	'\xdd',
 | |
| 	'\xde',
 | |
| 	'\xdf',
 | |
| 	'\xe0',
 | |
| 	'\xe1',
 | |
| 	'\xe2',
 | |
| 	'\xe3',
 | |
| 	'\xe4',
 | |
| 	'\xe5',
 | |
| 	'\xe6',
 | |
| 	'\xe7',
 | |
| 	'\xe8',
 | |
| 	'\xe9',
 | |
| 	'\xea',
 | |
| 	'\xeb',
 | |
| 	'\xec',
 | |
| 	'\xed',
 | |
| 	'\xee',
 | |
| 	'\xef',
 | |
| 	'\xf0',
 | |
| 	'\xf1',
 | |
| 	'\xf2',
 | |
| 	'\xf3',
 | |
| 	'\xf4',
 | |
| 	'\xf5',
 | |
| 	'\xf6',
 | |
| 	'\xf7',
 | |
| 	'\xf8',
 | |
| 	'\xf9',
 | |
| 	'\xfa',
 | |
| 	'\xfb',
 | |
| 	'\xfc',
 | |
| 	'\xfd',
 | |
| 	'\xfe',
 | |
| 	'\xff',
 | |
| }
 | |
| 
 |