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 |