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); | |
| 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 valLength = val.length; | |
|
Matt Perry
2014/07/07 22:45:45
nit: why not just use val.length everywhere?
| |
| 396 var numberOfBytes = kArrayHeaderSize + cls.encodedSize * valLength; | |
| 370 this.writeUint32(numberOfBytes); | 397 this.writeUint32(numberOfBytes); |
| 371 this.writeUint32(numberOfElements); | 398 this.writeUint32(numberOfElements); |
| 372 for (var i = 0; i < numberOfElements; ++i) { | 399 for (var i = 0; i < valLength; ++i) { |
| 373 cls.encode(this, val[i]); | 400 cls.encode(this, val[i]); |
| 374 } | 401 } |
| 375 }; | 402 }; |
| 376 | 403 |
| 377 Encoder.prototype.encodeStruct = function(cls, val) { | 404 Encoder.prototype.encodeStruct = function(cls, val) { |
| 378 return cls.encode(this, val); | 405 return cls.encode(this, val); |
| 379 }; | 406 }; |
| 380 | 407 |
| 381 Encoder.prototype.encodeStructPointer = function(cls, val) { | 408 Encoder.prototype.encodeStructPointer = function(cls, val) { |
| 382 if (!val) { | 409 if (!val) { |
| 383 this.encodePointer(val); | 410 this.encodePointer(val); |
| 384 return; | 411 return; |
| 385 } | 412 } |
| 386 var encoder = this.createAndEncodeEncoder(cls.encodedSize); | 413 var encoder = this.createAndEncodeEncoder(cls.encodedSize); |
| 387 cls.encode(encoder, val); | 414 cls.encode(encoder, val); |
| 388 }; | 415 }; |
| 389 | 416 |
| 390 Encoder.prototype.encodeArrayPointer = function(cls, val) { | 417 Encoder.prototype.encodeArrayPointer = function(cls, val) { |
| 391 if (!val) { | 418 if (!val) { |
| 392 this.encodePointer(val); | 419 this.encodePointer(val); |
| 393 return; | 420 return; |
| 394 } | 421 } |
| 395 var encodedSize = kArrayHeaderSize + cls.encodedSize * val.length; | 422 var encodedSize = kArrayHeaderSize + cls.encodedSize * val.length; |
| 396 var encoder = this.createAndEncodeEncoder(encodedSize); | 423 var encoder = this.createAndEncodeEncoder(encodedSize); |
| 397 encoder.encodeArray(cls, val); | 424 encoder.encodeArray(cls, val); |
| 398 }; | 425 }; |
| 399 | 426 |
| 427 Encoder.prototype.encodeBoolArrayPointer = function(val) { | |
| 428 if (!val) { | |
| 429 this.encodePointer(val); | |
| 430 return; | |
| 431 } | |
| 432 var numberOfElements = val.length; | |
| 433 var encodedSize = kArrayHeaderSize + Math.ceil(numberOfElements / 8); | |
|
Matt Perry
2014/07/07 22:45:45
do you also need to add cls.encodedSize? That rese
| |
| 434 var encoder = this.createAndEncodeEncoder(encodedSize); | |
| 435 | |
| 436 var bits = new Uint8Array(Math.ceil(numberOfElements / 8)); | |
| 437 for (var i = 0; i < numberOfElements; i++) { | |
| 438 if (val[i]) | |
| 439 bits[Math.floor(i / 8)] |= (1 << i % 8); | |
| 440 } | |
| 441 encoder.encodeArray(Uint8, bits, numberOfElements); | |
| 442 }; | |
| 443 | |
| 400 Encoder.prototype.encodeStringPointer = function(val) { | 444 Encoder.prototype.encodeStringPointer = function(val) { |
| 401 if (!val) { | 445 if (!val) { |
| 402 this.encodePointer(val); | 446 this.encodePointer(val); |
| 403 return; | 447 return; |
| 404 } | 448 } |
| 405 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); | 449 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); |
| 406 var encoder = this.createAndEncodeEncoder(encodedSize); | 450 var encoder = this.createAndEncodeEncoder(encodedSize); |
| 407 encoder.encodeString(val); | 451 encoder.encodeString(val); |
| 408 }; | 452 }; |
| 409 | 453 |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 689 ArrayOf.prototype.encodedSize = 8; | 733 ArrayOf.prototype.encodedSize = 8; |
| 690 | 734 |
| 691 ArrayOf.prototype.decode = function(decoder) { | 735 ArrayOf.prototype.decode = function(decoder) { |
| 692 return decoder.decodeArrayPointer(this.cls); | 736 return decoder.decodeArrayPointer(this.cls); |
| 693 }; | 737 }; |
| 694 | 738 |
| 695 ArrayOf.prototype.encode = function(encoder, val) { | 739 ArrayOf.prototype.encode = function(encoder, val) { |
| 696 encoder.encodeArrayPointer(this.cls, val); | 740 encoder.encodeArrayPointer(this.cls, val); |
| 697 }; | 741 }; |
| 698 | 742 |
| 743 function ArrayOfBool() { | |
| 744 } | |
| 745 | |
| 746 ArrayOfBool.prototype.encodedSize = 8; | |
| 747 | |
| 748 ArrayOfBool.prototype.decode = function(decoder) { | |
| 749 return decoder.decodeBoolArrayPointer(); | |
| 750 }; | |
| 751 | |
| 752 ArrayOfBool.prototype.encode = function(encoder, val) { | |
| 753 encoder.encodeBoolArrayPointer(val); | |
| 754 }; | |
| 755 | |
| 699 function Handle() { | 756 function Handle() { |
| 700 } | 757 } |
| 701 | 758 |
| 702 Handle.encodedSize = 4; | 759 Handle.encodedSize = 4; |
| 703 | 760 |
| 704 Handle.decode = function(decoder) { | 761 Handle.decode = function(decoder) { |
| 705 return decoder.decodeHandle(); | 762 return decoder.decodeHandle(); |
| 706 }; | 763 }; |
| 707 | 764 |
| 708 Handle.encode = function(encoder, val) { | 765 Handle.encode = function(encoder, val) { |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 727 exports.Uint16 = Uint16; | 784 exports.Uint16 = Uint16; |
| 728 exports.Int32 = Int32; | 785 exports.Int32 = Int32; |
| 729 exports.Uint32 = Uint32; | 786 exports.Uint32 = Uint32; |
| 730 exports.Int64 = Int64; | 787 exports.Int64 = Int64; |
| 731 exports.Uint64 = Uint64; | 788 exports.Uint64 = Uint64; |
| 732 exports.Float = Float; | 789 exports.Float = Float; |
| 733 exports.Double = Double; | 790 exports.Double = Double; |
| 734 exports.String = String; | 791 exports.String = String; |
| 735 exports.PointerTo = PointerTo; | 792 exports.PointerTo = PointerTo; |
| 736 exports.ArrayOf = ArrayOf; | 793 exports.ArrayOf = ArrayOf; |
| 794 exports.ArrayOfBool = ArrayOfBool; | |
| 737 exports.Handle = Handle; | 795 exports.Handle = Handle; |
| 738 return exports; | 796 return exports; |
| 739 }); | 797 }); |
| OLD | NEW |