Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 }); |
| OLD | NEW |