Index: mojo/public/js/bindings/codec.js |
diff --git a/mojo/public/js/bindings/codec.js b/mojo/public/js/bindings/codec.js |
index 84c86c1299125a654fdf3a9dec84b6295bcf6bbc..9756f4a5d6b59ca478cc6187808c7a256556c308 100644 |
--- a/mojo/public/js/bindings/codec.js |
+++ b/mojo/public/js/bindings/codec.js |
@@ -229,6 +229,20 @@ define("mojo/public/js/bindings/codec", [ |
return val; |
}; |
+ Decoder.prototype.decodeBoolArray = function() { |
+ var numberOfBytes = this.readUint32(); |
+ var numberOfElements = this.readUint32(); |
+ |
+ var val = new Array(numberOfElements); |
+ var byte; |
+ for (var i = 0; i < numberOfElements; ++i) { |
+ if (i % 8 == 0) |
+ byte = this.readUint8(); |
+ val[i] = (byte & (1 << i % 8)) ? true : false; |
+ } |
+ return val; |
+ }; |
+ |
Decoder.prototype.decodeStruct = function(cls) { |
return cls.decode(this); |
}; |
@@ -249,6 +263,14 @@ define("mojo/public/js/bindings/codec", [ |
return this.decodeAndCreateDecoder(pointer).decodeArray(cls); |
}; |
+ Decoder.prototype.decodeBoolArrayPointer = function() { |
+ var pointer = this.decodePointer(); |
+ if (!pointer) { |
+ return null; |
+ } |
+ return this.decodeAndCreateDecoder(pointer).decodeBoolArray(); |
+ }; |
+ |
Decoder.prototype.decodeStringPointer = function() { |
var pointer = this.decodePointer(); |
if (!pointer) { |
@@ -364,12 +386,13 @@ define("mojo/public/js/bindings/codec", [ |
this.next += numberOfElements; |
}; |
- Encoder.prototype.encodeArray = function(cls, val) { |
- var numberOfElements = val.length; |
- var numberOfBytes = kArrayHeaderSize + cls.encodedSize * numberOfElements; |
+ Encoder.prototype.encodeArray = function(cls, val, numberOfElements) { |
+ if (numberOfElements === undefined) |
+ numberOfElements = val.length; |
+ var numberOfBytes = kArrayHeaderSize + cls.encodedSize * val.length; |
this.writeUint32(numberOfBytes); |
this.writeUint32(numberOfElements); |
- for (var i = 0; i < numberOfElements; ++i) { |
+ for (var i = 0; i < val.length; ++i) { |
cls.encode(this, val[i]); |
} |
}; |
@@ -397,6 +420,23 @@ define("mojo/public/js/bindings/codec", [ |
encoder.encodeArray(cls, val); |
}; |
+ Encoder.prototype.encodeBoolArrayPointer = function(val) { |
+ if (!val) { |
+ this.encodePointer(val); |
+ return; |
+ } |
+ var numberOfElements = val.length; |
+ var encodedSize = kArrayHeaderSize + Math.ceil(numberOfElements / 8); |
+ var encoder = this.createAndEncodeEncoder(encodedSize); |
+ |
+ var bits = new Uint8Array(Math.ceil(numberOfElements / 8)); |
+ for (var i = 0; i < numberOfElements; i++) { |
+ if (val[i]) |
+ bits[Math.floor(i / 8)] |= (1 << i % 8); |
+ } |
+ encoder.encodeArray(Uint8, bits, numberOfElements); |
+ }; |
+ |
Encoder.prototype.encodeStringPointer = function(val) { |
if (!val) { |
this.encodePointer(val); |
@@ -696,6 +736,19 @@ define("mojo/public/js/bindings/codec", [ |
encoder.encodeArrayPointer(this.cls, val); |
}; |
+ function ArrayOfBoolArrayPointers() { |
+ } |
+ |
+ ArrayOfBoolArrayPointers.prototype.encodedSize = 8; |
+ |
+ ArrayOfBoolArrayPointers.prototype.decode = function(decoder) { |
+ return decoder.decodeBoolArrayPointer(); |
+ }; |
+ |
+ ArrayOfBoolArrayPointers.prototype.encode = function(encoder, val) { |
+ encoder.encodeBoolArrayPointer(val); |
+ }; |
+ |
function Handle() { |
} |
@@ -734,6 +787,7 @@ define("mojo/public/js/bindings/codec", [ |
exports.String = String; |
exports.PointerTo = PointerTo; |
exports.ArrayOf = ArrayOf; |
+ exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers; |
exports.Handle = Handle; |
return exports; |
}); |