548 lines
6.4 KiB
Go
548 lines
6.4 KiB
Go
|
// 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',
|
|||
|
}
|