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 |