msgpack-lite 0.1.17 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +1 -0
- package/.travis.yml +4 -2
- package/.zuul.yml +3 -3
- package/Makefile +2 -2
- package/README.md +109 -12
- package/bower.json +34 -0
- package/dist/msgpack.min.js +2 -2
- package/lib/buffer-global.js +11 -0
- package/lib/buffer-lite.js +88 -64
- package/lib/bufferish-array.js +41 -0
- package/lib/bufferish-buffer.js +46 -0
- package/lib/bufferish-proto.js +86 -0
- package/lib/bufferish-uint8array.js +51 -0
- package/lib/bufferish.js +108 -0
- package/lib/codec-base.js +67 -0
- package/lib/codec.js +10 -1
- package/lib/decode-buffer.js +16 -10
- package/lib/decode-stream.js +2 -3
- package/lib/decode.js +2 -3
- package/lib/decoder.js +2 -3
- package/lib/encode-buffer.js +15 -56
- package/lib/encode-stream.js +1 -2
- package/lib/encode.js +1 -2
- package/lib/encoder.js +1 -2
- package/lib/ext-buffer.js +3 -1
- package/lib/ext-packer.js +78 -0
- package/lib/ext-unpacker.js +81 -0
- package/lib/ext.js +5 -70
- package/lib/flex-buffer.js +194 -0
- package/lib/read-core.js +46 -25
- package/lib/read-format.js +118 -72
- package/lib/read-token.js +34 -4
- package/lib/write-core.js +64 -6
- package/lib/write-token.js +82 -42
- package/lib/write-type.js +218 -122
- package/lib/write-uint8.js +2 -2
- package/package.json +24 -12
- package/test/10.encode.js +50 -30
- package/test/11.decode.js +2 -0
- package/test/14.codec.js +95 -0
- package/test/15.useraw.js +92 -0
- package/test/16.binarraybuffer.js +91 -0
- package/test/17.uint8array.js +43 -0
- package/test/18.utf8.js +59 -0
- package/test/20.roundtrip.js +53 -33
- package/test/21.ext.js +2 -2
- package/test/23.extbuffer.js +44 -2
- package/test/24.int64.js +76 -0
- package/test/27.usemap.js +66 -0
- package/test/61.encode-only.js +26 -0
- package/test/62.decode-only.js +23 -0
- package/test/63.module-deps.js +77 -0
- package/lib/common.js +0 -3
- package/lib/ext-preset.js +0 -133
- package/lib/is-array.js +0 -3
- package/test/60.buffer-lite.js +0 -98
package/lib/read-format.js
CHANGED
|
@@ -1,39 +1,52 @@
|
|
|
1
1
|
// read-format.js
|
|
2
2
|
|
|
3
|
-
exports.format = {
|
|
4
|
-
map: map,
|
|
5
|
-
array: array,
|
|
6
|
-
str: str,
|
|
7
|
-
bin: bin,
|
|
8
|
-
ext: ext,
|
|
9
|
-
uint8: uint8,
|
|
10
|
-
uint16: uint16,
|
|
11
|
-
uint32: read(4, Buffer.prototype.readUInt32BE),
|
|
12
|
-
uint64: read(8, readUInt64BE),
|
|
13
|
-
int8: read(1, Buffer.prototype.readInt8),
|
|
14
|
-
int16: read(2, Buffer.prototype.readInt16BE),
|
|
15
|
-
int32: read(4, Buffer.prototype.readInt32BE),
|
|
16
|
-
int64: read(8, readInt64BE),
|
|
17
|
-
float32: read(4, readFloatBE),
|
|
18
|
-
float64: read(8, readDoubleBE)
|
|
19
|
-
};
|
|
20
|
-
|
|
21
3
|
var ieee754 = require("ieee754");
|
|
4
|
+
var Int64Buffer = require("int64-buffer");
|
|
5
|
+
var Uint64BE = Int64Buffer.Uint64BE;
|
|
6
|
+
var Int64BE = Int64Buffer.Int64BE;
|
|
7
|
+
|
|
8
|
+
exports.getReadFormat = getReadFormat;
|
|
9
|
+
exports.readUint8 = uint8;
|
|
22
10
|
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var BUFFER_SHORTAGE = require("./common").BUFFER_SHORTAGE;
|
|
26
|
-
var readInt32BE = Buffer.prototype.readInt32BE;
|
|
27
|
-
var readUInt32BE = Buffer.prototype.readUInt32BE;
|
|
11
|
+
var Bufferish = require("./bufferish");
|
|
12
|
+
var BufferProto = require("./bufferish-proto");
|
|
28
13
|
|
|
29
|
-
var
|
|
14
|
+
var HAS_MAP = ("undefined" !== typeof Map);
|
|
30
15
|
var NO_ASSERT = true;
|
|
31
16
|
|
|
32
|
-
function
|
|
17
|
+
function getReadFormat(options) {
|
|
18
|
+
var binarraybuffer = Bufferish.hasArrayBuffer && options && options.binarraybuffer;
|
|
19
|
+
var int64 = options && options.int64;
|
|
20
|
+
var usemap = HAS_MAP && options && options.usemap;
|
|
21
|
+
|
|
22
|
+
var readFormat = {
|
|
23
|
+
map: (usemap ? map_to_map : map_to_obj),
|
|
24
|
+
array: array,
|
|
25
|
+
str: str,
|
|
26
|
+
bin: (binarraybuffer ? bin_arraybuffer : bin_buffer),
|
|
27
|
+
ext: ext,
|
|
28
|
+
uint8: uint8,
|
|
29
|
+
uint16: uint16,
|
|
30
|
+
uint32: uint32,
|
|
31
|
+
uint64: read(8, int64 ? readUInt64BE_int64 : readUInt64BE),
|
|
32
|
+
int8: int8,
|
|
33
|
+
int16: int16,
|
|
34
|
+
int32: int32,
|
|
35
|
+
int64: read(8, int64 ? readInt64BE_int64 : readInt64BE),
|
|
36
|
+
float32: read(4, readFloatBE),
|
|
37
|
+
float64: read(8, readDoubleBE)
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
return readFormat;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function map_to_obj(decoder, len) {
|
|
33
44
|
var value = {};
|
|
34
45
|
var i;
|
|
35
46
|
var k = new Array(len);
|
|
36
47
|
var v = new Array(len);
|
|
48
|
+
|
|
49
|
+
var decode = decoder.codec.decode;
|
|
37
50
|
for (i = 0; i < len; i++) {
|
|
38
51
|
k[i] = decode(decoder);
|
|
39
52
|
v[i] = decode(decoder);
|
|
@@ -44,8 +57,26 @@ function map(decoder, len) {
|
|
|
44
57
|
return value;
|
|
45
58
|
}
|
|
46
59
|
|
|
60
|
+
function map_to_map(decoder, len) {
|
|
61
|
+
var value = new Map();
|
|
62
|
+
var i;
|
|
63
|
+
var k = new Array(len);
|
|
64
|
+
var v = new Array(len);
|
|
65
|
+
|
|
66
|
+
var decode = decoder.codec.decode;
|
|
67
|
+
for (i = 0; i < len; i++) {
|
|
68
|
+
k[i] = decode(decoder);
|
|
69
|
+
v[i] = decode(decoder);
|
|
70
|
+
}
|
|
71
|
+
for (i = 0; i < len; i++) {
|
|
72
|
+
value.set(k[i], v[i]);
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
|
|
47
77
|
function array(decoder, len) {
|
|
48
78
|
var value = new Array(len);
|
|
79
|
+
var decode = decoder.codec.decode;
|
|
49
80
|
for (var i = 0; i < len; i++) {
|
|
50
81
|
value[i] = decode(decoder);
|
|
51
82
|
}
|
|
@@ -53,83 +84,98 @@ function array(decoder, len) {
|
|
|
53
84
|
}
|
|
54
85
|
|
|
55
86
|
function str(decoder, len) {
|
|
56
|
-
var start = decoder.
|
|
57
|
-
var end =
|
|
58
|
-
|
|
59
|
-
if (end > buffer.length) throw BUFFER_SHORTAGE;
|
|
60
|
-
if (IS_BUFFER_SHIM || !Buffer.isBuffer(buffer)) {
|
|
61
|
-
// slower (compat)
|
|
62
|
-
return BufferLite.readString.call(buffer, start, end);
|
|
63
|
-
} else {
|
|
64
|
-
// 2x faster
|
|
65
|
-
return buffer.toString("utf-8", start, end);
|
|
66
|
-
}
|
|
87
|
+
var start = decoder.reserve(len);
|
|
88
|
+
var end = start + len;
|
|
89
|
+
return BufferProto.toString.call(decoder.buffer, "utf-8", start, end);
|
|
67
90
|
}
|
|
68
91
|
|
|
69
|
-
function
|
|
70
|
-
var start = decoder.
|
|
71
|
-
var end =
|
|
72
|
-
|
|
73
|
-
return
|
|
92
|
+
function bin_buffer(decoder, len) {
|
|
93
|
+
var start = decoder.reserve(len);
|
|
94
|
+
var end = start + len;
|
|
95
|
+
var buf = BufferProto.slice.call(decoder.buffer, start, end);
|
|
96
|
+
return Bufferish.from(buf);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function bin_arraybuffer(decoder, len) {
|
|
100
|
+
var start = decoder.reserve(len);
|
|
101
|
+
var end = start + len;
|
|
102
|
+
var buf = BufferProto.slice.call(decoder.buffer, start, end);
|
|
103
|
+
return Bufferish.Uint8Array.from(buf).buffer;
|
|
74
104
|
}
|
|
75
105
|
|
|
76
106
|
function ext(decoder, len) {
|
|
77
|
-
var start = decoder.
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
var type = decoder.buffer[start];
|
|
107
|
+
var start = decoder.reserve(len+1);
|
|
108
|
+
var type = decoder.buffer[start++];
|
|
109
|
+
var end = start + len;
|
|
81
110
|
var unpack = decoder.codec.getExtUnpacker(type);
|
|
82
111
|
if (!unpack) throw new Error("Invalid ext type: " + (type ? ("0x" + type.toString(16)) : type));
|
|
83
|
-
var buf = slice.call(decoder.buffer, start
|
|
112
|
+
var buf = BufferProto.slice.call(decoder.buffer, start, end);
|
|
84
113
|
return unpack(buf);
|
|
85
114
|
}
|
|
86
115
|
|
|
87
116
|
function uint8(decoder) {
|
|
88
|
-
var
|
|
89
|
-
|
|
90
|
-
|
|
117
|
+
var start = decoder.reserve(1);
|
|
118
|
+
return decoder.buffer[start];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function int8(decoder) {
|
|
122
|
+
var start = decoder.reserve(1);
|
|
123
|
+
var value = decoder.buffer[start];
|
|
124
|
+
return (value & 0x80) ? value - 0x100 : value;
|
|
91
125
|
}
|
|
92
126
|
|
|
93
127
|
function uint16(decoder) {
|
|
128
|
+
var start = decoder.reserve(2);
|
|
129
|
+
var buffer = decoder.buffer;
|
|
130
|
+
return (buffer[start++] << 8) | buffer[start];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function int16(decoder) {
|
|
134
|
+
var start = decoder.reserve(2);
|
|
135
|
+
var buffer = decoder.buffer;
|
|
136
|
+
var value = (buffer[start++] << 8) | buffer[start];
|
|
137
|
+
return (value & 0x8000) ? value - 0x10000 : value;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function uint32(decoder) {
|
|
141
|
+
var start = decoder.reserve(4);
|
|
94
142
|
var buffer = decoder.buffer;
|
|
95
|
-
|
|
96
|
-
|
|
143
|
+
return (buffer[start++] * 16777216) + (buffer[start++] << 16) + (buffer[start++] << 8) + buffer[start];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function int32(decoder) {
|
|
147
|
+
var start = decoder.reserve(4);
|
|
148
|
+
var buffer = decoder.buffer;
|
|
149
|
+
return (buffer[start++] << 24) | (buffer[start++] << 16) | (buffer[start++] << 8) | buffer[start];
|
|
97
150
|
}
|
|
98
151
|
|
|
99
152
|
function read(len, method) {
|
|
100
153
|
return function(decoder) {
|
|
101
|
-
var start = decoder.
|
|
102
|
-
var end = decoder.offset = start + len;
|
|
103
|
-
if (end > decoder.buffer.length) throw BUFFER_SHORTAGE;
|
|
154
|
+
var start = decoder.reserve(len);
|
|
104
155
|
return method.call(decoder.buffer, start, NO_ASSERT);
|
|
105
156
|
};
|
|
106
157
|
}
|
|
107
158
|
|
|
108
|
-
function readUInt64BE(start
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
159
|
+
function readUInt64BE(start) {
|
|
160
|
+
return new Uint64BE(this, start).toNumber();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function readInt64BE(start) {
|
|
164
|
+
return new Int64BE(this, start).toNumber();
|
|
112
165
|
}
|
|
113
166
|
|
|
114
|
-
function
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
167
|
+
function readUInt64BE_int64(start) {
|
|
168
|
+
return new Uint64BE(this, start);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function readInt64BE_int64(start) {
|
|
172
|
+
return new Int64BE(this, start);
|
|
118
173
|
}
|
|
119
174
|
|
|
120
175
|
function readFloatBE(start) {
|
|
121
|
-
if (this.readFloatBE) return this.readFloatBE(start);
|
|
122
176
|
return ieee754.read(this, start, false, 23, 4);
|
|
123
177
|
}
|
|
124
178
|
|
|
125
179
|
function readDoubleBE(start) {
|
|
126
|
-
if (this.readDoubleBE) return this.readDoubleBE(start);
|
|
127
180
|
return ieee754.read(this, start, false, 52, 8);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function slice(start, end) {
|
|
131
|
-
var f = this.slice || Array.prototype.slice;
|
|
132
|
-
var buf = f.call(this, start, end);
|
|
133
|
-
if (!Buffer.isBuffer(buf)) buf = Buffer(buf);
|
|
134
|
-
return buf;
|
|
135
|
-
}
|
|
181
|
+
}
|
package/lib/read-token.js
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
// read-token.js
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var ReadFormat = require("./read-format");
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
exports.getReadToken = getReadToken;
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
function getReadToken(options) {
|
|
8
|
+
var format = ReadFormat.getReadFormat(options);
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
if (options && options.useraw) {
|
|
11
|
+
return init_useraw(format);
|
|
12
|
+
} else {
|
|
13
|
+
return init_token(format);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function init_token(format) {
|
|
10
18
|
var i;
|
|
19
|
+
var token = new Array(256);
|
|
11
20
|
|
|
12
21
|
// positive fixint -- 0x00 - 0x7f
|
|
13
22
|
for (i = 0x00; i <= 0x7f; i++) {
|
|
@@ -109,6 +118,27 @@ function init() {
|
|
|
109
118
|
for (i = 0xe0; i <= 0xff; i++) {
|
|
110
119
|
token[i] = constant(i - 0x100);
|
|
111
120
|
}
|
|
121
|
+
|
|
122
|
+
return token;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function init_useraw(format) {
|
|
126
|
+
var i;
|
|
127
|
+
var token = init_token(format).slice();
|
|
128
|
+
|
|
129
|
+
// raw 8 -- 0xd9
|
|
130
|
+
// raw 16 -- 0xda
|
|
131
|
+
// raw 32 -- 0xdb
|
|
132
|
+
token[0xd9] = token[0xc4];
|
|
133
|
+
token[0xda] = token[0xc5];
|
|
134
|
+
token[0xdb] = token[0xc6];
|
|
135
|
+
|
|
136
|
+
// fixraw -- 0xa0 - 0xbf
|
|
137
|
+
for (i = 0xa0; i <= 0xbf; i++) {
|
|
138
|
+
token[i] = fix(i - 0xa0, format.bin);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return token;
|
|
112
142
|
}
|
|
113
143
|
|
|
114
144
|
function constant(value) {
|
package/lib/write-core.js
CHANGED
|
@@ -1,11 +1,69 @@
|
|
|
1
1
|
// write-core.js
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var ExtBuffer = require("./ext-buffer").ExtBuffer;
|
|
4
|
+
var ExtPacker = require("./ext-packer");
|
|
5
|
+
var WriteType = require("./write-type");
|
|
6
|
+
var CodecBase = require("./codec-base");
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
CodecBase.install({
|
|
9
|
+
addExtPacker: addExtPacker,
|
|
10
|
+
getExtPacker: getExtPacker,
|
|
11
|
+
init: init
|
|
12
|
+
});
|
|
6
13
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
exports.preset = init.call(CodecBase.preset);
|
|
15
|
+
|
|
16
|
+
function getEncoder(options) {
|
|
17
|
+
var writeType = WriteType.getWriteType(options);
|
|
18
|
+
return encode;
|
|
19
|
+
|
|
20
|
+
function encode(encoder, value) {
|
|
21
|
+
var func = writeType[typeof value];
|
|
22
|
+
if (!func) throw new Error("Unsupported type \"" + (typeof value) + "\": " + value);
|
|
23
|
+
func(encoder, value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function init() {
|
|
28
|
+
var options = this.options;
|
|
29
|
+
this.encode = getEncoder(options);
|
|
30
|
+
|
|
31
|
+
if (options && options.preset) {
|
|
32
|
+
ExtPacker.setExtPackers(this);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function addExtPacker(etype, Class, packer) {
|
|
39
|
+
packer = CodecBase.filter(packer);
|
|
40
|
+
var name = Class.name;
|
|
41
|
+
if (name && name !== "Object") {
|
|
42
|
+
var packers = this.extPackers || (this.extPackers = {});
|
|
43
|
+
packers[name] = extPacker;
|
|
44
|
+
} else {
|
|
45
|
+
// fallback for IE
|
|
46
|
+
var list = this.extEncoderList || (this.extEncoderList = []);
|
|
47
|
+
list.unshift([Class, extPacker]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function extPacker(value) {
|
|
51
|
+
if (packer) value = packer(value);
|
|
52
|
+
return new ExtBuffer(value, etype);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function getExtPacker(value) {
|
|
57
|
+
var packers = this.extPackers || (this.extPackers = {});
|
|
58
|
+
var c = value.constructor;
|
|
59
|
+
var e = c && c.name && packers[c.name];
|
|
60
|
+
if (e) return e;
|
|
61
|
+
|
|
62
|
+
// fallback for IE
|
|
63
|
+
var list = this.extEncoderList || (this.extEncoderList = []);
|
|
64
|
+
var len = list.length;
|
|
65
|
+
for (var i = 0; i < len; i++) {
|
|
66
|
+
var pair = list[i];
|
|
67
|
+
if (c === pair[0]) return pair[1];
|
|
68
|
+
}
|
|
11
69
|
}
|
package/lib/write-token.js
CHANGED
|
@@ -1,34 +1,51 @@
|
|
|
1
1
|
// write-token.js
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var ieee754 = require("ieee754");
|
|
4
|
+
var Int64Buffer = require("int64-buffer");
|
|
5
|
+
var Uint64BE = Int64Buffer.Uint64BE;
|
|
6
|
+
var Int64BE = Int64Buffer.Int64BE;
|
|
4
7
|
|
|
5
|
-
var BufferLite = require("./buffer-lite");
|
|
6
8
|
var uint8 = require("./write-uint8").uint8;
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
var IS_BUFFER_SHIM = ("TYPED_ARRAY_SUPPORT" in Buffer);
|
|
9
|
+
var Bufferish = require("./bufferish");
|
|
10
|
+
var Buffer = Bufferish.global;
|
|
11
|
+
var IS_BUFFER_SHIM = Bufferish.hasBuffer && ("TYPED_ARRAY_SUPPORT" in Buffer);
|
|
10
12
|
var NO_TYPED_ARRAY = IS_BUFFER_SHIM && !Buffer.TYPED_ARRAY_SUPPORT;
|
|
13
|
+
var Buffer_prototype = Bufferish.hasBuffer && Buffer.prototype || {};
|
|
14
|
+
|
|
15
|
+
exports.getWriteToken = getWriteToken;
|
|
16
|
+
|
|
17
|
+
function getWriteToken(options) {
|
|
18
|
+
if (options && options.uint8array) {
|
|
19
|
+
return init_uint8array();
|
|
20
|
+
} else if (NO_TYPED_ARRAY || (Bufferish.hasBuffer && options && options.safe)) {
|
|
21
|
+
return init_safe();
|
|
22
|
+
} else {
|
|
23
|
+
return init_token();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function init_uint8array() {
|
|
28
|
+
var token = init_token();
|
|
29
|
+
|
|
30
|
+
// float 32 -- 0xca
|
|
31
|
+
// float 64 -- 0xcb
|
|
32
|
+
token[0xca] = writeN(0xca, 4, writeFloatBE);
|
|
33
|
+
token[0xcb] = writeN(0xcb, 8, writeDoubleBE);
|
|
34
|
+
|
|
35
|
+
return token;
|
|
36
|
+
}
|
|
11
37
|
|
|
12
|
-
|
|
38
|
+
// Node.js and browsers with TypedArray
|
|
13
39
|
|
|
14
|
-
function
|
|
40
|
+
function init_token() {
|
|
41
|
+
// (immediate values)
|
|
15
42
|
// positive fixint -- 0x00 - 0x7f
|
|
16
43
|
// nil -- 0xc0
|
|
17
44
|
// false -- 0xc2
|
|
18
45
|
// true -- 0xc3
|
|
19
46
|
// negative fixint -- 0xe0 - 0xff
|
|
20
|
-
|
|
21
|
-
token[i] = uint8[i];
|
|
22
|
-
}
|
|
47
|
+
var token = uint8.slice();
|
|
23
48
|
|
|
24
|
-
if (NO_TYPED_ARRAY) {
|
|
25
|
-
init_compatible(); // old browsers
|
|
26
|
-
} else {
|
|
27
|
-
init_optimized(); // Node.js and browsers with TypedArray
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function init_optimized() {
|
|
32
49
|
// bin 8 -- 0xc4
|
|
33
50
|
// bin 16 -- 0xc5
|
|
34
51
|
// bin 32 -- 0xc6
|
|
@@ -45,8 +62,8 @@ function init_optimized() {
|
|
|
45
62
|
|
|
46
63
|
// float 32 -- 0xca
|
|
47
64
|
// float 64 -- 0xcb
|
|
48
|
-
token[0xca] = writeN(0xca, 4,
|
|
49
|
-
token[0xcb] = writeN(0xcb, 8,
|
|
65
|
+
token[0xca] = writeN(0xca, 4, (Buffer_prototype.writeFloatBE || writeFloatBE), true);
|
|
66
|
+
token[0xcb] = writeN(0xcb, 8, (Buffer_prototype.writeDoubleBE || writeDoubleBE), true);
|
|
50
67
|
|
|
51
68
|
// uint 8 -- 0xcc
|
|
52
69
|
// uint 16 -- 0xcd
|
|
@@ -55,7 +72,7 @@ function init_optimized() {
|
|
|
55
72
|
token[0xcc] = write1(0xcc);
|
|
56
73
|
token[0xcd] = write2(0xcd);
|
|
57
74
|
token[0xce] = write4(0xce);
|
|
58
|
-
token[0xcf] = writeN(0xcf, 8,
|
|
75
|
+
token[0xcf] = writeN(0xcf, 8, writeUInt64BE);
|
|
59
76
|
|
|
60
77
|
// int 8 -- 0xd0
|
|
61
78
|
// int 16 -- 0xd1
|
|
@@ -64,7 +81,7 @@ function init_optimized() {
|
|
|
64
81
|
token[0xd0] = write1(0xd0);
|
|
65
82
|
token[0xd1] = write2(0xd1);
|
|
66
83
|
token[0xd2] = write4(0xd2);
|
|
67
|
-
token[0xd3] = writeN(0xd3, 8,
|
|
84
|
+
token[0xd3] = writeN(0xd3, 8, writeInt64BE);
|
|
68
85
|
|
|
69
86
|
// str 8 -- 0xd9
|
|
70
87
|
// str 16 -- 0xda
|
|
@@ -82,9 +99,21 @@ function init_optimized() {
|
|
|
82
99
|
// map 32 -- 0xdf
|
|
83
100
|
token[0xde] = write2(0xde);
|
|
84
101
|
token[0xdf] = write4(0xdf);
|
|
102
|
+
|
|
103
|
+
return token;
|
|
85
104
|
}
|
|
86
105
|
|
|
87
|
-
|
|
106
|
+
// safe mode: for old browsers and who needs asserts
|
|
107
|
+
|
|
108
|
+
function init_safe() {
|
|
109
|
+
// (immediate values)
|
|
110
|
+
// positive fixint -- 0x00 - 0x7f
|
|
111
|
+
// nil -- 0xc0
|
|
112
|
+
// false -- 0xc2
|
|
113
|
+
// true -- 0xc3
|
|
114
|
+
// negative fixint -- 0xe0 - 0xff
|
|
115
|
+
var token = uint8.slice();
|
|
116
|
+
|
|
88
117
|
// bin 8 -- 0xc4
|
|
89
118
|
// bin 16 -- 0xc5
|
|
90
119
|
// bin 32 -- 0xc6
|
|
@@ -111,7 +140,7 @@ function init_compatible() {
|
|
|
111
140
|
token[0xcc] = writeN(0xcc, 1, Buffer.prototype.writeUInt8);
|
|
112
141
|
token[0xcd] = writeN(0xcd, 2, Buffer.prototype.writeUInt16BE);
|
|
113
142
|
token[0xce] = writeN(0xce, 4, Buffer.prototype.writeUInt32BE);
|
|
114
|
-
token[0xcf] = writeN(0xcf, 8,
|
|
143
|
+
token[0xcf] = writeN(0xcf, 8, writeUInt64BE);
|
|
115
144
|
|
|
116
145
|
// int 8 -- 0xd0
|
|
117
146
|
// int 16 -- 0xd1
|
|
@@ -120,7 +149,7 @@ function init_compatible() {
|
|
|
120
149
|
token[0xd0] = writeN(0xd0, 1, Buffer.prototype.writeInt8);
|
|
121
150
|
token[0xd1] = writeN(0xd1, 2, Buffer.prototype.writeInt16BE);
|
|
122
151
|
token[0xd2] = writeN(0xd2, 4, Buffer.prototype.writeInt32BE);
|
|
123
|
-
token[0xd3] = writeN(0xd3, 8,
|
|
152
|
+
token[0xd3] = writeN(0xd3, 8, writeInt64BE);
|
|
124
153
|
|
|
125
154
|
// str 8 -- 0xd9
|
|
126
155
|
// str 16 -- 0xda
|
|
@@ -138,50 +167,61 @@ function init_compatible() {
|
|
|
138
167
|
// map 32 -- 0xdf
|
|
139
168
|
token[0xde] = writeN(0xde, 2, Buffer.prototype.writeUInt16BE);
|
|
140
169
|
token[0xdf] = writeN(0xdf, 4, Buffer.prototype.writeUInt32BE);
|
|
170
|
+
|
|
171
|
+
return token;
|
|
141
172
|
}
|
|
142
173
|
|
|
143
174
|
function write1(type) {
|
|
144
175
|
return function(encoder, value) {
|
|
145
|
-
encoder.reserve(2);
|
|
176
|
+
var offset = encoder.reserve(2);
|
|
146
177
|
var buffer = encoder.buffer;
|
|
147
|
-
var offset = encoder.offset;
|
|
148
178
|
buffer[offset++] = type;
|
|
149
|
-
buffer[offset
|
|
150
|
-
encoder.offset = offset;
|
|
179
|
+
buffer[offset] = value;
|
|
151
180
|
};
|
|
152
181
|
}
|
|
153
182
|
|
|
154
183
|
function write2(type) {
|
|
155
184
|
return function(encoder, value) {
|
|
156
|
-
encoder.reserve(3);
|
|
185
|
+
var offset = encoder.reserve(3);
|
|
157
186
|
var buffer = encoder.buffer;
|
|
158
|
-
var offset = encoder.offset;
|
|
159
187
|
buffer[offset++] = type;
|
|
160
188
|
buffer[offset++] = value >>> 8;
|
|
161
|
-
buffer[offset
|
|
162
|
-
encoder.offset = offset;
|
|
189
|
+
buffer[offset] = value;
|
|
163
190
|
};
|
|
164
191
|
}
|
|
165
192
|
|
|
166
193
|
function write4(type) {
|
|
167
194
|
return function(encoder, value) {
|
|
168
|
-
encoder.reserve(5);
|
|
195
|
+
var offset = encoder.reserve(5);
|
|
169
196
|
var buffer = encoder.buffer;
|
|
170
|
-
var offset = encoder.offset;
|
|
171
197
|
buffer[offset++] = type;
|
|
172
198
|
buffer[offset++] = value >>> 24;
|
|
173
199
|
buffer[offset++] = value >>> 16;
|
|
174
200
|
buffer[offset++] = value >>> 8;
|
|
175
|
-
buffer[offset
|
|
176
|
-
encoder.offset = offset;
|
|
201
|
+
buffer[offset] = value;
|
|
177
202
|
};
|
|
178
203
|
}
|
|
179
204
|
|
|
180
|
-
function writeN(type, len, method) {
|
|
205
|
+
function writeN(type, len, method, noAssert) {
|
|
181
206
|
return function(encoder, value) {
|
|
182
|
-
encoder.reserve(len + 1);
|
|
183
|
-
encoder.buffer[
|
|
184
|
-
method.call(encoder.buffer, value,
|
|
185
|
-
encoder.offset += len;
|
|
207
|
+
var offset = encoder.reserve(len + 1);
|
|
208
|
+
encoder.buffer[offset++] = type;
|
|
209
|
+
method.call(encoder.buffer, value, offset, noAssert);
|
|
186
210
|
};
|
|
187
211
|
}
|
|
212
|
+
|
|
213
|
+
function writeUInt64BE(value, offset) {
|
|
214
|
+
new Uint64BE(this, offset, value);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function writeInt64BE(value, offset) {
|
|
218
|
+
new Int64BE(this, offset, value);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function writeFloatBE(value, offset) {
|
|
222
|
+
ieee754.write(this, value, offset, false, 23, 4);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function writeDoubleBE(value, offset) {
|
|
226
|
+
ieee754.write(this, value, offset, false, 52, 8);
|
|
227
|
+
}
|