UNPKG

5.09 kBJavaScriptView Raw
1// write-token.js
2
3var token = exports.token = new Array(256);
4
5var BufferLite = require("./buffer-lite");
6var uint8 = require("./write-uint8").uint8;
7
8var NO_ASSERT = true;
9var IS_BUFFER_SHIM = ("TYPED_ARRAY_SUPPORT" in Buffer);
10var NO_TYPED_ARRAY = IS_BUFFER_SHIM && !Buffer.TYPED_ARRAY_SUPPORT;
11
12init();
13
14function init() {
15 // positive fixint -- 0x00 - 0x7f
16 // nil -- 0xc0
17 // false -- 0xc2
18 // true -- 0xc3
19 // negative fixint -- 0xe0 - 0xff
20 for (var i = 0x00; i <= 0xFF; i++) {
21 token[i] = uint8[i];
22 }
23
24 if (NO_TYPED_ARRAY) {
25 init_compatible(); // old browsers
26 } else {
27 init_optimized(); // Node.js and browsers with TypedArray
28 }
29}
30
31function init_optimized() {
32 // bin 8 -- 0xc4
33 // bin 16 -- 0xc5
34 // bin 32 -- 0xc6
35 token[0xc4] = write1(0xc4);
36 token[0xc5] = write2(0xc5);
37 token[0xc6] = write4(0xc6);
38
39 // ext 8 -- 0xc7
40 // ext 16 -- 0xc8
41 // ext 32 -- 0xc9
42 token[0xc7] = write1(0xc7);
43 token[0xc8] = write2(0xc8);
44 token[0xc9] = write4(0xc9);
45
46 // float 32 -- 0xca
47 // float 64 -- 0xcb
48 token[0xca] = writeN(0xca, 4, Buffer.prototype.writeFloatBE);
49 token[0xcb] = writeN(0xcb, 8, Buffer.prototype.writeDoubleBE);
50
51 // uint 8 -- 0xcc
52 // uint 16 -- 0xcd
53 // uint 32 -- 0xce
54 // uint 64 -- 0xcf
55 token[0xcc] = write1(0xcc);
56 token[0xcd] = write2(0xcd);
57 token[0xce] = write4(0xce);
58 token[0xcf] = writeN(0xcf, 8, BufferLite.writeUint64BE);
59
60 // int 8 -- 0xd0
61 // int 16 -- 0xd1
62 // int 32 -- 0xd2
63 // int 64 -- 0xd3
64 token[0xd0] = write1(0xd0);
65 token[0xd1] = write2(0xd1);
66 token[0xd2] = write4(0xd2);
67 token[0xd3] = writeN(0xd3, 8, BufferLite.writeUint64BE);
68
69 // str 8 -- 0xd9
70 // str 16 -- 0xda
71 // str 32 -- 0xdb
72 token[0xd9] = write1(0xd9);
73 token[0xda] = write2(0xda);
74 token[0xdb] = write4(0xdb);
75
76 // array 16 -- 0xdc
77 // array 32 -- 0xdd
78 token[0xdc] = write2(0xdc);
79 token[0xdd] = write4(0xdd);
80
81 // map 16 -- 0xde
82 // map 32 -- 0xdf
83 token[0xde] = write2(0xde);
84 token[0xdf] = write4(0xdf);
85}
86
87function init_compatible() {
88 // bin 8 -- 0xc4
89 // bin 16 -- 0xc5
90 // bin 32 -- 0xc6
91 token[0xc4] = writeN(0xc4, 1, Buffer.prototype.writeUInt8);
92 token[0xc5] = writeN(0xc5, 2, Buffer.prototype.writeUInt16BE);
93 token[0xc6] = writeN(0xc6, 4, Buffer.prototype.writeUInt32BE);
94
95 // ext 8 -- 0xc7
96 // ext 16 -- 0xc8
97 // ext 32 -- 0xc9
98 token[0xc7] = writeN(0xc7, 1, Buffer.prototype.writeUInt8);
99 token[0xc8] = writeN(0xc8, 2, Buffer.prototype.writeUInt16BE);
100 token[0xc9] = writeN(0xc9, 4, Buffer.prototype.writeUInt32BE);
101
102 // float 32 -- 0xca
103 // float 64 -- 0xcb
104 token[0xca] = writeN(0xca, 4, Buffer.prototype.writeFloatBE);
105 token[0xcb] = writeN(0xcb, 8, Buffer.prototype.writeDoubleBE);
106
107 // uint 8 -- 0xcc
108 // uint 16 -- 0xcd
109 // uint 32 -- 0xce
110 // uint 64 -- 0xcf
111 token[0xcc] = writeN(0xcc, 1, Buffer.prototype.writeUInt8);
112 token[0xcd] = writeN(0xcd, 2, Buffer.prototype.writeUInt16BE);
113 token[0xce] = writeN(0xce, 4, Buffer.prototype.writeUInt32BE);
114 token[0xcf] = writeN(0xcf, 8, BufferLite.writeUint64BE);
115
116 // int 8 -- 0xd0
117 // int 16 -- 0xd1
118 // int 32 -- 0xd2
119 // int 64 -- 0xd3
120 token[0xd0] = writeN(0xd0, 1, Buffer.prototype.writeInt8);
121 token[0xd1] = writeN(0xd1, 2, Buffer.prototype.writeInt16BE);
122 token[0xd2] = writeN(0xd2, 4, Buffer.prototype.writeInt32BE);
123 token[0xd3] = writeN(0xd3, 8, BufferLite.writeUint64BE);
124
125 // str 8 -- 0xd9
126 // str 16 -- 0xda
127 // str 32 -- 0xdb
128 token[0xd9] = writeN(0xd9, 1, Buffer.prototype.writeUInt8);
129 token[0xda] = writeN(0xda, 2, Buffer.prototype.writeUInt16BE);
130 token[0xdb] = writeN(0xdb, 4, Buffer.prototype.writeUInt32BE);
131
132 // array 16 -- 0xdc
133 // array 32 -- 0xdd
134 token[0xdc] = writeN(0xdc, 2, Buffer.prototype.writeUInt16BE);
135 token[0xdd] = writeN(0xdd, 4, Buffer.prototype.writeUInt32BE);
136
137 // map 16 -- 0xde
138 // map 32 -- 0xdf
139 token[0xde] = writeN(0xde, 2, Buffer.prototype.writeUInt16BE);
140 token[0xdf] = writeN(0xdf, 4, Buffer.prototype.writeUInt32BE);
141}
142
143function write1(type) {
144 return function(encoder, value) {
145 encoder.reserve(2);
146 var buffer = encoder.buffer;
147 var offset = encoder.offset;
148 buffer[offset++] = type;
149 buffer[offset++] = value;
150 encoder.offset = offset;
151 };
152}
153
154function write2(type) {
155 return function(encoder, value) {
156 encoder.reserve(3);
157 var buffer = encoder.buffer;
158 var offset = encoder.offset;
159 buffer[offset++] = type;
160 buffer[offset++] = value >>> 8;
161 buffer[offset++] = value;
162 encoder.offset = offset;
163 };
164}
165
166function write4(type) {
167 return function(encoder, value) {
168 encoder.reserve(5);
169 var buffer = encoder.buffer;
170 var offset = encoder.offset;
171 buffer[offset++] = type;
172 buffer[offset++] = value >>> 24;
173 buffer[offset++] = value >>> 16;
174 buffer[offset++] = value >>> 8;
175 buffer[offset++] = value;
176 encoder.offset = offset;
177 };
178}
179
180function writeN(type, len, method) {
181 return function(encoder, value) {
182 encoder.reserve(len + 1);
183 encoder.buffer[encoder.offset++] = type;
184 method.call(encoder.buffer, value, encoder.offset, NO_ASSERT);
185 encoder.offset += len;
186 };
187}