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

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: Simplified Decoder.prototype.decodeBoolArray() 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 val = new Array(numberOfElements);
237 var byte;
238 for (var i = 0; i < numberOfElements; ++i) {
239 if (i % 8 == 0)
240 byte = this.readUint8();
241 val[i] = (byte & (1 << i % 8)) ? true : false;
242 }
243 return val;
244 };
245
232 Decoder.prototype.decodeStruct = function(cls) { 246 Decoder.prototype.decodeStruct = function(cls) {
233 return cls.decode(this); 247 return cls.decode(this);
234 }; 248 };
235 249
236 Decoder.prototype.decodeStructPointer = function(cls) { 250 Decoder.prototype.decodeStructPointer = function(cls) {
237 var pointer = this.decodePointer(); 251 var pointer = this.decodePointer();
238 if (!pointer) { 252 if (!pointer) {
239 return null; 253 return null;
240 } 254 }
241 return cls.decode(this.decodeAndCreateDecoder(pointer)); 255 return cls.decode(this.decodeAndCreateDecoder(pointer));
242 }; 256 };
243 257
244 Decoder.prototype.decodeArrayPointer = function(cls) { 258 Decoder.prototype.decodeArrayPointer = function(cls) {
245 var pointer = this.decodePointer(); 259 var pointer = this.decodePointer();
246 if (!pointer) { 260 if (!pointer) {
247 return null; 261 return null;
248 } 262 }
249 return this.decodeAndCreateDecoder(pointer).decodeArray(cls); 263 return this.decodeAndCreateDecoder(pointer).decodeArray(cls);
250 }; 264 };
251 265
266 Decoder.prototype.decodeBoolArrayPointer = function() {
267 var pointer = this.decodePointer();
268 if (!pointer) {
269 return null;
270 }
271 return this.decodeAndCreateDecoder(pointer).decodeBoolArray();
272 };
273
252 Decoder.prototype.decodeStringPointer = function() { 274 Decoder.prototype.decodeStringPointer = function() {
253 var pointer = this.decodePointer(); 275 var pointer = this.decodePointer();
254 if (!pointer) { 276 if (!pointer) {
255 return null; 277 return null;
256 } 278 }
257 return this.decodeAndCreateDecoder(pointer).decodeString(); 279 return this.decodeAndCreateDecoder(pointer).decodeString();
258 }; 280 };
259 281
260 // Encoder ------------------------------------------------------------------ 282 // Encoder ------------------------------------------------------------------
261 283
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 Encoder.prototype.encodeString = function(val) { 379 Encoder.prototype.encodeString = function(val) {
358 var base = this.next + kArrayHeaderSize; 380 var base = this.next + kArrayHeaderSize;
359 var numberOfElements = unicode.encodeUtf8String( 381 var numberOfElements = unicode.encodeUtf8String(
360 val, new Uint8Array(this.buffer.arrayBuffer, base)); 382 val, new Uint8Array(this.buffer.arrayBuffer, base));
361 var numberOfBytes = kArrayHeaderSize + numberOfElements; 383 var numberOfBytes = kArrayHeaderSize + numberOfElements;
362 this.writeUint32(numberOfBytes); 384 this.writeUint32(numberOfBytes);
363 this.writeUint32(numberOfElements); 385 this.writeUint32(numberOfElements);
364 this.next += numberOfElements; 386 this.next += numberOfElements;
365 }; 387 };
366 388
367 Encoder.prototype.encodeArray = function(cls, val) { 389 Encoder.prototype.encodeArray = function(cls, val, numberOfElements) {
368 var numberOfElements = val.length; 390 if (numberOfElements === undefined)
369 var numberOfBytes = kArrayHeaderSize + cls.encodedSize * numberOfElements; 391 numberOfElements = val.length;
392 var numberOfBytes = kArrayHeaderSize + cls.encodedSize * val.length;
370 this.writeUint32(numberOfBytes); 393 this.writeUint32(numberOfBytes);
371 this.writeUint32(numberOfElements); 394 this.writeUint32(numberOfElements);
372 for (var i = 0; i < numberOfElements; ++i) { 395 for (var i = 0; i < val.length; ++i) {
373 cls.encode(this, val[i]); 396 cls.encode(this, val[i]);
374 } 397 }
375 }; 398 };
376 399
377 Encoder.prototype.encodeStruct = function(cls, val) { 400 Encoder.prototype.encodeStruct = function(cls, val) {
378 return cls.encode(this, val); 401 return cls.encode(this, val);
379 }; 402 };
380 403
381 Encoder.prototype.encodeStructPointer = function(cls, val) { 404 Encoder.prototype.encodeStructPointer = function(cls, val) {
382 if (!val) { 405 if (!val) {
383 this.encodePointer(val); 406 this.encodePointer(val);
384 return; 407 return;
385 } 408 }
386 var encoder = this.createAndEncodeEncoder(cls.encodedSize); 409 var encoder = this.createAndEncodeEncoder(cls.encodedSize);
387 cls.encode(encoder, val); 410 cls.encode(encoder, val);
388 }; 411 };
389 412
390 Encoder.prototype.encodeArrayPointer = function(cls, val) { 413 Encoder.prototype.encodeArrayPointer = function(cls, val) {
391 if (!val) { 414 if (!val) {
392 this.encodePointer(val); 415 this.encodePointer(val);
393 return; 416 return;
394 } 417 }
395 var encodedSize = kArrayHeaderSize + cls.encodedSize * val.length; 418 var encodedSize = kArrayHeaderSize + cls.encodedSize * val.length;
396 var encoder = this.createAndEncodeEncoder(encodedSize); 419 var encoder = this.createAndEncodeEncoder(encodedSize);
397 encoder.encodeArray(cls, val); 420 encoder.encodeArray(cls, val);
398 }; 421 };
399 422
423 Encoder.prototype.encodeBoolArrayPointer = function(val) {
424 if (!val) {
425 this.encodePointer(val);
426 return;
427 }
428 var numberOfElements = val.length;
429 var encodedSize = kArrayHeaderSize + Math.ceil(numberOfElements / 8);
430 var encoder = this.createAndEncodeEncoder(encodedSize);
431
432 var bits = new Uint8Array(Math.ceil(numberOfElements / 8));
433 for (var i = 0; i < numberOfElements; i++) {
434 if (val[i])
435 bits[Math.floor(i / 8)] |= (1 << i % 8);
436 }
437 encoder.encodeArray(Uint8, bits, numberOfElements);
438 };
439
400 Encoder.prototype.encodeStringPointer = function(val) { 440 Encoder.prototype.encodeStringPointer = function(val) {
401 if (!val) { 441 if (!val) {
402 this.encodePointer(val); 442 this.encodePointer(val);
403 return; 443 return;
404 } 444 }
405 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); 445 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val);
406 var encoder = this.createAndEncodeEncoder(encodedSize); 446 var encoder = this.createAndEncodeEncoder(encodedSize);
407 encoder.encodeString(val); 447 encoder.encodeString(val);
408 }; 448 };
409 449
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 ArrayOf.prototype.encodedSize = 8; 729 ArrayOf.prototype.encodedSize = 8;
690 730
691 ArrayOf.prototype.decode = function(decoder) { 731 ArrayOf.prototype.decode = function(decoder) {
692 return decoder.decodeArrayPointer(this.cls); 732 return decoder.decodeArrayPointer(this.cls);
693 }; 733 };
694 734
695 ArrayOf.prototype.encode = function(encoder, val) { 735 ArrayOf.prototype.encode = function(encoder, val) {
696 encoder.encodeArrayPointer(this.cls, val); 736 encoder.encodeArrayPointer(this.cls, val);
697 }; 737 };
698 738
739 function ArrayOfBoolArrayPointers() {
740 }
741
742 ArrayOfBoolArrayPointers.prototype.encodedSize = 8;
743
744 ArrayOfBoolArrayPointers.prototype.decode = function(decoder) {
745 return decoder.decodeBoolArrayPointer();
746 };
747
748 ArrayOfBoolArrayPointers.prototype.encode = function(encoder, val) {
749 encoder.encodeBoolArrayPointer(val);
750 };
751
699 function Handle() { 752 function Handle() {
700 } 753 }
701 754
702 Handle.encodedSize = 4; 755 Handle.encodedSize = 4;
703 756
704 Handle.decode = function(decoder) { 757 Handle.decode = function(decoder) {
705 return decoder.decodeHandle(); 758 return decoder.decodeHandle();
706 }; 759 };
707 760
708 Handle.encode = function(encoder, val) { 761 Handle.encode = function(encoder, val) {
(...skipping 18 matching lines...) Expand all
727 exports.Uint16 = Uint16; 780 exports.Uint16 = Uint16;
728 exports.Int32 = Int32; 781 exports.Int32 = Int32;
729 exports.Uint32 = Uint32; 782 exports.Uint32 = Uint32;
730 exports.Int64 = Int64; 783 exports.Int64 = Int64;
731 exports.Uint64 = Uint64; 784 exports.Uint64 = Uint64;
732 exports.Float = Float; 785 exports.Float = Float;
733 exports.Double = Double; 786 exports.Double = Double;
734 exports.String = String; 787 exports.String = String;
735 exports.PointerTo = PointerTo; 788 exports.PointerTo = PointerTo;
736 exports.ArrayOf = ArrayOf; 789 exports.ArrayOf = ArrayOf;
790 exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers;
737 exports.Handle = Handle; 791 exports.Handle = Handle;
738 return exports; 792 return exports;
739 }); 793 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698