Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: mojo/public/js/bindings/codec.js

Issue 377713004: Support packed arrays of booleans in Mojo messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renamed ArrayOfBool to ArrayOfBoolArrayPointers Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 define("mojo/public/js/bindings/codec", [ 5 define("mojo/public/js/bindings/codec", [
6 "mojo/public/js/bindings/unicode" 6 "mojo/public/js/bindings/unicode"
7 ], function(unicode) { 7 ], function(unicode) {
8 8
9 var kErrorUnsigned = "Passing negative value to unsigned"; 9 var kErrorUnsigned = "Passing negative value to unsigned";
10 10
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 Decoder.prototype.decodeArray = function(cls) { 222 Decoder.prototype.decodeArray = function(cls) {
223 var numberOfBytes = this.readUint32(); 223 var numberOfBytes = this.readUint32();
224 var numberOfElements = this.readUint32(); 224 var numberOfElements = this.readUint32();
225 var val = new Array(numberOfElements); 225 var val = new Array(numberOfElements);
226 for (var i = 0; i < numberOfElements; ++i) { 226 for (var i = 0; i < numberOfElements; ++i) {
227 val[i] = cls.decode(this); 227 val[i] = cls.decode(this);
228 } 228 }
229 return val; 229 return val;
230 }; 230 };
231 231
232 Decoder.prototype.decodeBoolArray = function() {
233 var numberOfBytes = this.readUint32();
234 var numberOfElements = this.readUint32();
235
236 var bitsLength = Math.ceil(numberOfElements / 8);
237 var bits = new Uint8Array(bitsLength);
abarth-chromium 2014/07/08 02:00:33 You should be able to do this work without allocat
238 for (var i = 0; i < bitsLength; ++i) {
239 bits[i] = Uint8.decode(this);
240 }
241
242 var val = new Array(numberOfElements);
243 for (var i = 0; i < numberOfElements; ++i) {
244 val[i] = (bits[Math.floor(i / 8)] & (1 << i % 8)) ? true : false;
245 }
246 return val;
247 };
248
232 Decoder.prototype.decodeStruct = function(cls) { 249 Decoder.prototype.decodeStruct = function(cls) {
233 return cls.decode(this); 250 return cls.decode(this);
234 }; 251 };
235 252
236 Decoder.prototype.decodeStructPointer = function(cls) { 253 Decoder.prototype.decodeStructPointer = function(cls) {
237 var pointer = this.decodePointer(); 254 var pointer = this.decodePointer();
238 if (!pointer) { 255 if (!pointer) {
239 return null; 256 return null;
240 } 257 }
241 return cls.decode(this.decodeAndCreateDecoder(pointer)); 258 return cls.decode(this.decodeAndCreateDecoder(pointer));
242 }; 259 };
243 260
244 Decoder.prototype.decodeArrayPointer = function(cls) { 261 Decoder.prototype.decodeArrayPointer = function(cls) {
245 var pointer = this.decodePointer(); 262 var pointer = this.decodePointer();
246 if (!pointer) { 263 if (!pointer) {
247 return null; 264 return null;
248 } 265 }
249 return this.decodeAndCreateDecoder(pointer).decodeArray(cls); 266 return this.decodeAndCreateDecoder(pointer).decodeArray(cls);
250 }; 267 };
251 268
269 Decoder.prototype.decodeBoolArrayPointer = function() {
270 var pointer = this.decodePointer();
271 if (!pointer) {
272 return null;
273 }
274 return this.decodeAndCreateDecoder(pointer).decodeBoolArray();
275 };
276
252 Decoder.prototype.decodeStringPointer = function() { 277 Decoder.prototype.decodeStringPointer = function() {
253 var pointer = this.decodePointer(); 278 var pointer = this.decodePointer();
254 if (!pointer) { 279 if (!pointer) {
255 return null; 280 return null;
256 } 281 }
257 return this.decodeAndCreateDecoder(pointer).decodeString(); 282 return this.decodeAndCreateDecoder(pointer).decodeString();
258 }; 283 };
259 284
260 // Encoder ------------------------------------------------------------------ 285 // Encoder ------------------------------------------------------------------
261 286
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 Encoder.prototype.encodeString = function(val) { 382 Encoder.prototype.encodeString = function(val) {
358 var base = this.next + kArrayHeaderSize; 383 var base = this.next + kArrayHeaderSize;
359 var numberOfElements = unicode.encodeUtf8String( 384 var numberOfElements = unicode.encodeUtf8String(
360 val, new Uint8Array(this.buffer.arrayBuffer, base)); 385 val, new Uint8Array(this.buffer.arrayBuffer, base));
361 var numberOfBytes = kArrayHeaderSize + numberOfElements; 386 var numberOfBytes = kArrayHeaderSize + numberOfElements;
362 this.writeUint32(numberOfBytes); 387 this.writeUint32(numberOfBytes);
363 this.writeUint32(numberOfElements); 388 this.writeUint32(numberOfElements);
364 this.next += numberOfElements; 389 this.next += numberOfElements;
365 }; 390 };
366 391
367 Encoder.prototype.encodeArray = function(cls, val) { 392 Encoder.prototype.encodeArray = function(cls, val, numberOfElements) {
368 var numberOfElements = val.length; 393 if (numberOfElements === undefined)
369 var numberOfBytes = kArrayHeaderSize + cls.encodedSize * numberOfElements; 394 numberOfElements = val.length;
395 var numberOfBytes = kArrayHeaderSize + cls.encodedSize * val.length;
370 this.writeUint32(numberOfBytes); 396 this.writeUint32(numberOfBytes);
371 this.writeUint32(numberOfElements); 397 this.writeUint32(numberOfElements);
372 for (var i = 0; i < numberOfElements; ++i) { 398 for (var i = 0; i < val.length; ++i) {
373 cls.encode(this, val[i]); 399 cls.encode(this, val[i]);
374 } 400 }
375 }; 401 };
376 402
377 Encoder.prototype.encodeStruct = function(cls, val) { 403 Encoder.prototype.encodeStruct = function(cls, val) {
378 return cls.encode(this, val); 404 return cls.encode(this, val);
379 }; 405 };
380 406
381 Encoder.prototype.encodeStructPointer = function(cls, val) { 407 Encoder.prototype.encodeStructPointer = function(cls, val) {
382 if (!val) { 408 if (!val) {
383 this.encodePointer(val); 409 this.encodePointer(val);
384 return; 410 return;
385 } 411 }
386 var encoder = this.createAndEncodeEncoder(cls.encodedSize); 412 var encoder = this.createAndEncodeEncoder(cls.encodedSize);
387 cls.encode(encoder, val); 413 cls.encode(encoder, val);
388 }; 414 };
389 415
390 Encoder.prototype.encodeArrayPointer = function(cls, val) { 416 Encoder.prototype.encodeArrayPointer = function(cls, val) {
391 if (!val) { 417 if (!val) {
392 this.encodePointer(val); 418 this.encodePointer(val);
393 return; 419 return;
394 } 420 }
395 var encodedSize = kArrayHeaderSize + cls.encodedSize * val.length; 421 var encodedSize = kArrayHeaderSize + cls.encodedSize * val.length;
396 var encoder = this.createAndEncodeEncoder(encodedSize); 422 var encoder = this.createAndEncodeEncoder(encodedSize);
397 encoder.encodeArray(cls, val); 423 encoder.encodeArray(cls, val);
398 }; 424 };
399 425
426 Encoder.prototype.encodeBoolArrayPointer = function(val) {
427 if (!val) {
428 this.encodePointer(val);
429 return;
430 }
431 var numberOfElements = val.length;
432 var encodedSize = kArrayHeaderSize + Math.ceil(numberOfElements / 8);
433 var encoder = this.createAndEncodeEncoder(encodedSize);
434
435 var bits = new Uint8Array(Math.ceil(numberOfElements / 8));
436 for (var i = 0; i < numberOfElements; i++) {
437 if (val[i])
438 bits[Math.floor(i / 8)] |= (1 << i % 8);
439 }
440 encoder.encodeArray(Uint8, bits, numberOfElements);
441 };
442
400 Encoder.prototype.encodeStringPointer = function(val) { 443 Encoder.prototype.encodeStringPointer = function(val) {
401 if (!val) { 444 if (!val) {
402 this.encodePointer(val); 445 this.encodePointer(val);
403 return; 446 return;
404 } 447 }
405 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); 448 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val);
406 var encoder = this.createAndEncodeEncoder(encodedSize); 449 var encoder = this.createAndEncodeEncoder(encodedSize);
407 encoder.encodeString(val); 450 encoder.encodeString(val);
408 }; 451 };
409 452
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 ArrayOf.prototype.encodedSize = 8; 732 ArrayOf.prototype.encodedSize = 8;
690 733
691 ArrayOf.prototype.decode = function(decoder) { 734 ArrayOf.prototype.decode = function(decoder) {
692 return decoder.decodeArrayPointer(this.cls); 735 return decoder.decodeArrayPointer(this.cls);
693 }; 736 };
694 737
695 ArrayOf.prototype.encode = function(encoder, val) { 738 ArrayOf.prototype.encode = function(encoder, val) {
696 encoder.encodeArrayPointer(this.cls, val); 739 encoder.encodeArrayPointer(this.cls, val);
697 }; 740 };
698 741
742 function ArrayOfBoolArrayPointers() {
743 }
744
745 ArrayOfBoolArrayPointers.prototype.encodedSize = 8;
746
747 ArrayOfBoolArrayPointers.prototype.decode = function(decoder) {
748 return decoder.decodeBoolArrayPointer();
749 };
750
751 ArrayOfBoolArrayPointers.prototype.encode = function(encoder, val) {
752 encoder.encodeBoolArrayPointer(val);
753 };
754
699 function Handle() { 755 function Handle() {
700 } 756 }
701 757
702 Handle.encodedSize = 4; 758 Handle.encodedSize = 4;
703 759
704 Handle.decode = function(decoder) { 760 Handle.decode = function(decoder) {
705 return decoder.decodeHandle(); 761 return decoder.decodeHandle();
706 }; 762 };
707 763
708 Handle.encode = function(encoder, val) { 764 Handle.encode = function(encoder, val) {
(...skipping 18 matching lines...) Expand all
727 exports.Uint16 = Uint16; 783 exports.Uint16 = Uint16;
728 exports.Int32 = Int32; 784 exports.Int32 = Int32;
729 exports.Uint32 = Uint32; 785 exports.Uint32 = Uint32;
730 exports.Int64 = Int64; 786 exports.Int64 = Int64;
731 exports.Uint64 = Uint64; 787 exports.Uint64 = Uint64;
732 exports.Float = Float; 788 exports.Float = Float;
733 exports.Double = Double; 789 exports.Double = Double;
734 exports.String = String; 790 exports.String = String;
735 exports.PointerTo = PointerTo; 791 exports.PointerTo = PointerTo;
736 exports.ArrayOf = ArrayOf; 792 exports.ArrayOf = ArrayOf;
793 exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers;
737 exports.Handle = Handle; 794 exports.Handle = Handle;
738 return exports; 795 return exports;
739 }); 796 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698