| Index: mojo/public/js/bindings/codec.js
|
| diff --git a/mojo/public/js/bindings/codec.js b/mojo/public/js/bindings/codec.js
|
| index b922a821d683095065a48846949c78c3451529b1..7a01693fcc98e3c7190efd12bbb79e673d2a9483 100644
|
| --- a/mojo/public/js/bindings/codec.js
|
| +++ b/mojo/public/js/bindings/codec.js
|
| @@ -27,6 +27,7 @@ define("mojo/public/js/bindings/codec", [
|
| var kStructHeaderSize = 8;
|
| var kMessageHeaderSize = 16;
|
| var kMessageWithRequestIDHeaderSize = 24;
|
| + var kMapStructPayloadSize = 16;
|
|
|
| var kStructHeaderNumBytesOffset = 0;
|
| var kStructHeaderNumFieldsOffset = 4;
|
| @@ -180,6 +181,26 @@ define("mojo/public/js/bindings/codec", [
|
| return this.decodeAndCreateDecoder(pointer).decodeString();
|
| };
|
|
|
| + Decoder.prototype.decodeMap = function(keyClass, valueClass) {
|
| + this.skip(4); // numberOfBytes
|
| + this.skip(4); // numberOfFields
|
| + var keys = this.decodeArrayPointer(keyClass);
|
| + var values = this.decodeArrayPointer(valueClass);
|
| + var val = new Map();
|
| + for (var i = 0; i < keys.length; i++)
|
| + val.set(keys[i], values[i]);
|
| + return val;
|
| + };
|
| +
|
| + Decoder.prototype.decodeMapPointer = function(keyClass, valueClass) {
|
| + var pointer = this.decodePointer();
|
| + if (!pointer) {
|
| + return null;
|
| + }
|
| + var decoder = this.decodeAndCreateDecoder(pointer);
|
| + return decoder.decodeMap(keyClass, valueClass);
|
| + };
|
| +
|
| // Encoder ------------------------------------------------------------------
|
|
|
| function Encoder(buffer, handles, base) {
|
| @@ -349,6 +370,31 @@ define("mojo/public/js/bindings/codec", [
|
| encoder.encodeString(val);
|
| };
|
|
|
| + Encoder.prototype.encodeMap = function(keyClass, valueClass, val) {
|
| + var keys = new Array(val.size);
|
| + var values = new Array(val.size);
|
| + var i = 0;
|
| + val.forEach(function(value, key) {
|
| + values[i] = value;
|
| + keys[i++] = key;
|
| + });
|
| + this.writeUint32(kStructHeaderSize + kMapStructPayloadSize);
|
| + this.writeUint32(2); // two fields: keys, values
|
| + this.encodeArrayPointer(keyClass, keys);
|
| + this.encodeArrayPointer(valueClass, values);
|
| + }
|
| +
|
| + Encoder.prototype.encodeMapPointer = function(keyClass, valueClass, val) {
|
| + if (val == null) {
|
| + // Also handles undefined, since undefined == null.
|
| + this.encodePointer(val);
|
| + return;
|
| + }
|
| + var encodedSize = kStructHeaderSize + kMapStructPayloadSize;
|
| + var encoder = this.createAndEncodeEncoder(encodedSize);
|
| + encoder.encodeMap(keyClass, valueClass, val);
|
| + };
|
| +
|
| // Message ------------------------------------------------------------------
|
|
|
| var kMessageNameOffset = kStructHeaderSize;
|
| @@ -710,6 +756,7 @@ define("mojo/public/js/bindings/codec", [
|
| exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
|
| exports.MessageReader = MessageReader;
|
| exports.kArrayHeaderSize = kArrayHeaderSize;
|
| + exports.kMapStructPayloadSize = kMapStructPayloadSize;
|
| exports.kStructHeaderSize = kStructHeaderSize;
|
| exports.kEncodedInvalidHandleValue = kEncodedInvalidHandleValue;
|
| exports.kMessageHeaderSize = kMessageHeaderSize;
|
|
|