| Index: mojo/public/js/bindings/codec.js
|
| diff --git a/mojo/public/js/bindings/codec.js b/mojo/public/js/bindings/codec.js
|
| index 9756f4a5d6b59ca478cc6187808c7a256556c308..dca6009071d01a724845d27d8f2dfa9b3f969bc5 100644
|
| --- a/mojo/public/js/bindings/codec.js
|
| +++ b/mojo/public/js/bindings/codec.js
|
| @@ -3,112 +3,20 @@
|
| // found in the LICENSE file.
|
|
|
| define("mojo/public/js/bindings/codec", [
|
| - "mojo/public/js/bindings/unicode"
|
| -], function(unicode) {
|
| + "mojo/public/js/bindings/unicode",
|
| + "mojo/public/js/bindings/buffer"
|
| + ], function(unicode, buffer) {
|
|
|
| var kErrorUnsigned = "Passing negative value to unsigned";
|
|
|
| // Memory -------------------------------------------------------------------
|
|
|
| var kAlignment = 8;
|
| - var kHighWordMultiplier = 0x100000000;
|
| - var kHostIsLittleEndian = (function () {
|
| - var endianArrayBuffer = new ArrayBuffer(2);
|
| - var endianUint8Array = new Uint8Array(endianArrayBuffer);
|
| - var endianUint16Array = new Uint16Array(endianArrayBuffer);
|
| - endianUint16Array[0] = 1;
|
| - return endianUint8Array[0] == 1;
|
| - })();
|
|
|
| function align(size) {
|
| return size + (kAlignment - (size % kAlignment)) % kAlignment;
|
| }
|
|
|
| - function getInt64(dataView, byteOffset, value) {
|
| - var lo, hi;
|
| - if (kHostIsLittleEndian) {
|
| - lo = dataView.getUint32(byteOffset, kHostIsLittleEndian);
|
| - hi = dataView.getInt32(byteOffset + 4, kHostIsLittleEndian);
|
| - } else {
|
| - hi = dataView.getInt32(byteOffset, kHostIsLittleEndian);
|
| - lo = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian);
|
| - }
|
| - return lo + hi * kHighWordMultiplier;
|
| - }
|
| -
|
| - function getUint64(dataView, byteOffset, value) {
|
| - var lo, hi;
|
| - if (kHostIsLittleEndian) {
|
| - lo = dataView.getUint32(byteOffset, kHostIsLittleEndian);
|
| - hi = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian);
|
| - } else {
|
| - hi = dataView.getUint32(byteOffset, kHostIsLittleEndian);
|
| - lo = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian);
|
| - }
|
| - return lo + hi * kHighWordMultiplier;
|
| - }
|
| -
|
| - function setInt64(dataView, byteOffset, value) {
|
| - var hi = Math.floor(value / kHighWordMultiplier);
|
| - if (kHostIsLittleEndian) {
|
| - dataView.setInt32(byteOffset, value, kHostIsLittleEndian);
|
| - dataView.setInt32(byteOffset + 4, hi, kHostIsLittleEndian);
|
| - } else {
|
| - dataView.setInt32(byteOffset, hi, kHostIsLittleEndian);
|
| - dataView.setInt32(byteOffset + 4, value, kHostIsLittleEndian);
|
| - }
|
| - }
|
| -
|
| - function setUint64(dataView, byteOffset, value) {
|
| - var hi = (value / kHighWordMultiplier) | 0;
|
| - if (kHostIsLittleEndian) {
|
| - dataView.setInt32(byteOffset, value, kHostIsLittleEndian);
|
| - dataView.setInt32(byteOffset + 4, hi, kHostIsLittleEndian);
|
| - } else {
|
| - dataView.setInt32(byteOffset, hi, kHostIsLittleEndian);
|
| - dataView.setInt32(byteOffset + 4, value, kHostIsLittleEndian);
|
| - }
|
| - }
|
| -
|
| - function copyArrayBuffer(dstArrayBuffer, srcArrayBuffer) {
|
| - (new Uint8Array(dstArrayBuffer)).set(new Uint8Array(srcArrayBuffer));
|
| - }
|
| -
|
| - // Buffer -------------------------------------------------------------------
|
| -
|
| - function Buffer(sizeOrArrayBuffer) {
|
| - if (sizeOrArrayBuffer instanceof ArrayBuffer) {
|
| - this.arrayBuffer = sizeOrArrayBuffer;
|
| - } else {
|
| - this.arrayBuffer = new ArrayBuffer(sizeOrArrayBuffer);
|
| - };
|
| -
|
| - this.dataView = new DataView(this.arrayBuffer);
|
| - this.next = 0;
|
| - }
|
| -
|
| - Buffer.prototype.alloc = function(size) {
|
| - var pointer = this.next;
|
| - this.next += size;
|
| - if (this.next > this.arrayBuffer.byteLength) {
|
| - var newSize = (1.5 * (this.arrayBuffer.byteLength + size)) | 0;
|
| - this.grow(newSize);
|
| - }
|
| - return pointer;
|
| - };
|
| -
|
| - Buffer.prototype.grow = function(size) {
|
| - var newArrayBuffer = new ArrayBuffer(size);
|
| - copyArrayBuffer(newArrayBuffer, this.arrayBuffer);
|
| - this.arrayBuffer = newArrayBuffer;
|
| - this.dataView = new DataView(this.arrayBuffer);
|
| - };
|
| -
|
| - Buffer.prototype.trim = function() {
|
| - this.arrayBuffer = this.arrayBuffer.slice(0, this.next);
|
| - this.dataView = new DataView(this.arrayBuffer);
|
| - };
|
| -
|
| // Constants ----------------------------------------------------------------
|
|
|
| var kArrayHeaderSize = 8;
|
| @@ -130,64 +38,61 @@ define("mojo/public/js/bindings/codec", [
|
| };
|
|
|
| Decoder.prototype.readInt8 = function() {
|
| - var result = this.buffer.dataView.getInt8(this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getInt8(this.next);
|
| this.next += 1;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readUint8 = function() {
|
| - var result = this.buffer.dataView.getUint8(this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getUint8(this.next);
|
| this.next += 1;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readInt16 = function() {
|
| - var result = this.buffer.dataView.getInt16(this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getInt16(this.next);
|
| this.next += 2;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readUint16 = function() {
|
| - var result = this.buffer.dataView.getUint16(this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getUint16(this.next);
|
| this.next += 2;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readInt32 = function() {
|
| - var result = this.buffer.dataView.getInt32(this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getInt32(this.next);
|
| this.next += 4;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readUint32 = function() {
|
| - var result = this.buffer.dataView.getUint32(this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getUint32(this.next);
|
| this.next += 4;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readInt64 = function() {
|
| - var result = getInt64(this.buffer.dataView, this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getInt64(this.next);
|
| this.next += 8;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readUint64 = function() {
|
| - var result = getUint64(
|
| - this.buffer.dataView, this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getUint64(this.next);
|
| this.next += 8;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readFloat = function() {
|
| - var result = this.buffer.dataView.getFloat32(
|
| - this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getFloat32(this.next);
|
| this.next += 4;
|
| return result;
|
| };
|
|
|
| Decoder.prototype.readDouble = function() {
|
| - var result = this.buffer.dataView.getFloat64(
|
| - this.next, kHostIsLittleEndian);
|
| + var result = this.buffer.getFloat64(this.next);
|
| this.next += 8;
|
| return result;
|
| };
|
| @@ -293,8 +198,7 @@ define("mojo/public/js/bindings/codec", [
|
| };
|
|
|
| Encoder.prototype.writeInt8 = function(val) {
|
| - // NOTE: Endianness doesn't come into play for single bytes.
|
| - this.buffer.dataView.setInt8(this.next, val);
|
| + this.buffer.setInt8(this.next, val);
|
| this.next += 1;
|
| };
|
|
|
| @@ -302,13 +206,12 @@ define("mojo/public/js/bindings/codec", [
|
| if (val < 0) {
|
| throw new Error(kErrorUnsigned);
|
| }
|
| - // NOTE: Endianness doesn't come into play for single bytes.
|
| - this.buffer.dataView.setUint8(this.next, val);
|
| + this.buffer.setUint8(this.next, val);
|
| this.next += 1;
|
| };
|
|
|
| Encoder.prototype.writeInt16 = function(val) {
|
| - this.buffer.dataView.setInt16(this.next, val, kHostIsLittleEndian);
|
| + this.buffer.setInt16(this.next, val);
|
| this.next += 2;
|
| };
|
|
|
| @@ -316,12 +219,12 @@ define("mojo/public/js/bindings/codec", [
|
| if (val < 0) {
|
| throw new Error(kErrorUnsigned);
|
| }
|
| - this.buffer.dataView.setUint16(this.next, val, kHostIsLittleEndian);
|
| + this.buffer.setUint16(this.next, val);
|
| this.next += 2;
|
| };
|
|
|
| Encoder.prototype.writeInt32 = function(val) {
|
| - this.buffer.dataView.setInt32(this.next, val, kHostIsLittleEndian);
|
| + this.buffer.setInt32(this.next, val);
|
| this.next += 4;
|
| };
|
|
|
| @@ -329,12 +232,12 @@ define("mojo/public/js/bindings/codec", [
|
| if (val < 0) {
|
| throw new Error(kErrorUnsigned);
|
| }
|
| - this.buffer.dataView.setUint32(this.next, val, kHostIsLittleEndian);
|
| + this.buffer.setUint32(this.next, val);
|
| this.next += 4;
|
| };
|
|
|
| Encoder.prototype.writeInt64 = function(val) {
|
| - setInt64(this.buffer.dataView, this.next, val);
|
| + this.buffer.setInt64(this.next, val);
|
| this.next += 8;
|
| };
|
|
|
| @@ -342,17 +245,17 @@ define("mojo/public/js/bindings/codec", [
|
| if (val < 0) {
|
| throw new Error(kErrorUnsigned);
|
| }
|
| - setUint64(this.buffer.dataView, this.next, val);
|
| + this.buffer.setUint64(this.next, val);
|
| this.next += 8;
|
| };
|
|
|
| Encoder.prototype.writeFloat = function(val) {
|
| - this.buffer.dataView.setFloat32(this.next, val, kHostIsLittleEndian);
|
| + this.buffer.setFloat32(this.next, val);
|
| this.next += 4;
|
| };
|
|
|
| Encoder.prototype.writeDouble = function(val) {
|
| - this.buffer.dataView.setFloat64(this.next, val, kHostIsLittleEndian);
|
| + this.buffer.setFloat64(this.next, val);
|
| this.next += 8;
|
| };
|
|
|
| @@ -465,11 +368,11 @@ define("mojo/public/js/bindings/codec", [
|
|
|
| Message.prototype.setRequestID = function(requestID) {
|
| // TODO(darin): Verify that space was reserved for this field!
|
| - setUint64(this.buffer.dataView, kRequestIDOffset, requestID);
|
| + this.buffer.setUint64(kRequestIDOffset, requestID);
|
| };
|
|
|
| Message.prototype.getFlags = function() {
|
| - return this.buffer.dataView.getUint32(kFlagsOffset, kHostIsLittleEndian);
|
| + return this.buffer.getUint32(kFlagsOffset);
|
| };
|
|
|
| // MessageBuilder -----------------------------------------------------------
|
| @@ -478,7 +381,7 @@ define("mojo/public/js/bindings/codec", [
|
| // Currently, we don't compute the payload size correctly ahead of time.
|
| // Instead, we resize the buffer at the end.
|
| var numberOfBytes = kMessageHeaderSize + payloadSize;
|
| - this.buffer = new Buffer(numberOfBytes);
|
| + this.buffer = new buffer.Buffer(numberOfBytes);
|
| this.handles = [];
|
| var encoder = this.createEncoder(kMessageHeaderSize);
|
| encoder.writeUint32(kMessageHeaderSize);
|
| @@ -514,7 +417,7 @@ define("mojo/public/js/bindings/codec", [
|
| // Currently, we don't compute the payload size correctly ahead of time.
|
| // Instead, we resize the buffer at the end.
|
| var numberOfBytes = kMessageWithRequestIDHeaderSize + payloadSize;
|
| - this.buffer = new Buffer(numberOfBytes);
|
| + this.buffer = new buffer.Buffer(numberOfBytes);
|
| this.handles = [];
|
| var encoder = this.createEncoder(kMessageWithRequestIDHeaderSize);
|
| encoder.writeUint32(kMessageWithRequestIDHeaderSize);
|
| @@ -535,8 +438,7 @@ define("mojo/public/js/bindings/codec", [
|
| function MessageReader(message) {
|
| this.decoder = new Decoder(message.buffer, message.handles, 0);
|
| var messageHeaderSize = this.decoder.readUint32();
|
| - this.payloadSize =
|
| - message.buffer.arrayBuffer.byteLength - messageHeaderSize;
|
| + this.payloadSize = message.buffer.byteLength - messageHeaderSize;
|
| var numFields = this.decoder.readUint32();
|
| this.messageName = this.decoder.readUint32();
|
| this.flags = this.decoder.readUint32();
|
| @@ -764,7 +666,6 @@ define("mojo/public/js/bindings/codec", [
|
|
|
| var exports = {};
|
| exports.align = align;
|
| - exports.Buffer = Buffer;
|
| exports.Message = Message;
|
| exports.MessageBuilder = MessageBuilder;
|
| exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
|
|
|