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.
Files changed (56) hide show
  1. package/.npmignore +1 -0
  2. package/.travis.yml +4 -2
  3. package/.zuul.yml +3 -3
  4. package/Makefile +2 -2
  5. package/README.md +109 -12
  6. package/bower.json +34 -0
  7. package/dist/msgpack.min.js +2 -2
  8. package/lib/buffer-global.js +11 -0
  9. package/lib/buffer-lite.js +88 -64
  10. package/lib/bufferish-array.js +41 -0
  11. package/lib/bufferish-buffer.js +46 -0
  12. package/lib/bufferish-proto.js +86 -0
  13. package/lib/bufferish-uint8array.js +51 -0
  14. package/lib/bufferish.js +108 -0
  15. package/lib/codec-base.js +67 -0
  16. package/lib/codec.js +10 -1
  17. package/lib/decode-buffer.js +16 -10
  18. package/lib/decode-stream.js +2 -3
  19. package/lib/decode.js +2 -3
  20. package/lib/decoder.js +2 -3
  21. package/lib/encode-buffer.js +15 -56
  22. package/lib/encode-stream.js +1 -2
  23. package/lib/encode.js +1 -2
  24. package/lib/encoder.js +1 -2
  25. package/lib/ext-buffer.js +3 -1
  26. package/lib/ext-packer.js +78 -0
  27. package/lib/ext-unpacker.js +81 -0
  28. package/lib/ext.js +5 -70
  29. package/lib/flex-buffer.js +194 -0
  30. package/lib/read-core.js +46 -25
  31. package/lib/read-format.js +118 -72
  32. package/lib/read-token.js +34 -4
  33. package/lib/write-core.js +64 -6
  34. package/lib/write-token.js +82 -42
  35. package/lib/write-type.js +218 -122
  36. package/lib/write-uint8.js +2 -2
  37. package/package.json +24 -12
  38. package/test/10.encode.js +50 -30
  39. package/test/11.decode.js +2 -0
  40. package/test/14.codec.js +95 -0
  41. package/test/15.useraw.js +92 -0
  42. package/test/16.binarraybuffer.js +91 -0
  43. package/test/17.uint8array.js +43 -0
  44. package/test/18.utf8.js +59 -0
  45. package/test/20.roundtrip.js +53 -33
  46. package/test/21.ext.js +2 -2
  47. package/test/23.extbuffer.js +44 -2
  48. package/test/24.int64.js +76 -0
  49. package/test/27.usemap.js +66 -0
  50. package/test/61.encode-only.js +26 -0
  51. package/test/62.decode-only.js +23 -0
  52. package/test/63.module-deps.js +77 -0
  53. package/lib/common.js +0 -3
  54. package/lib/ext-preset.js +0 -133
  55. package/lib/is-array.js +0 -3
  56. package/test/60.buffer-lite.js +0 -98
@@ -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 BufferLite = require("./buffer-lite");
24
- var decode = require("./read-core").decode;
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 IS_BUFFER_SHIM = ("TYPED_ARRAY_SUPPORT" in Buffer);
14
+ var HAS_MAP = ("undefined" !== typeof Map);
30
15
  var NO_ASSERT = true;
31
16
 
32
- function map(decoder, len) {
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.offset;
57
- var end = decoder.offset = start + len;
58
- var buffer = decoder.buffer;
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 bin(decoder, len) {
70
- var start = decoder.offset;
71
- var end = decoder.offset = start + len;
72
- if (end > decoder.buffer.length) throw BUFFER_SHORTAGE;
73
- return slice.call(decoder.buffer, start, end);
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.offset;
78
- var end = decoder.offset = start + len + 1;
79
- if (end > decoder.buffer.length) throw BUFFER_SHORTAGE;
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 + 1, end);
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 buffer = decoder.buffer;
89
- if (decoder.offset >= buffer.length) throw BUFFER_SHORTAGE;
90
- return buffer[decoder.offset++];
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
- if (decoder.offset + 2 > buffer.length) throw BUFFER_SHORTAGE;
96
- return (buffer[decoder.offset++] << 8) | buffer[decoder.offset++];
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.offset;
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, noAssert) {
109
- var upper = readUInt32BE.call(this, start, noAssert);
110
- var lower = readUInt32BE.call(this, start + 4, noAssert);
111
- return upper ? (upper * 4294967296 + lower) : lower;
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 readInt64BE(start, noAssert) {
115
- var upper = readInt32BE.call(this, start, noAssert);
116
- var lower = readUInt32BE.call(this, start + 4, noAssert);
117
- return upper ? (upper * 4294967296 + lower) : lower;
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 token = exports.token = new Array(256);
3
+ var ReadFormat = require("./read-format");
4
4
 
5
- var format = require("./read-format").format;
5
+ exports.getReadToken = getReadToken;
6
6
 
7
- init();
7
+ function getReadToken(options) {
8
+ var format = ReadFormat.getReadFormat(options);
8
9
 
9
- function init() {
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
- exports.encode = encode;
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
- var type = require("./write-type").type;
8
+ CodecBase.install({
9
+ addExtPacker: addExtPacker,
10
+ getExtPacker: getExtPacker,
11
+ init: init
12
+ });
6
13
 
7
- function encode(encoder, value) {
8
- var func = type[typeof value];
9
- if (!func) throw new Error("Unsupported type \"" + (typeof value) + "\": " + value);
10
- func(encoder, value);
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
  }
@@ -1,34 +1,51 @@
1
1
  // write-token.js
2
2
 
3
- var token = exports.token = new Array(256);
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 NO_ASSERT = true;
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
- init();
38
+ // Node.js and browsers with TypedArray
13
39
 
14
- function init() {
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
- for (var i = 0x00; i <= 0xFF; i++) {
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, Buffer.prototype.writeFloatBE);
49
- token[0xcb] = writeN(0xcb, 8, Buffer.prototype.writeDoubleBE);
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, BufferLite.writeUint64BE);
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, BufferLite.writeUint64BE);
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
- function init_compatible() {
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, BufferLite.writeUint64BE);
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, BufferLite.writeUint64BE);
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++] = value;
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++] = value;
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++] = value;
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[encoder.offset++] = type;
184
- method.call(encoder.buffer, value, encoder.offset, NO_ASSERT);
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
+ }