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