| 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 part of bindings; | 5 part of bindings; |
| 6 | 6 |
| 7 int align(int size) => size + (kAlignment - (size % kAlignment)) % kAlignment; | 7 int align(int size) => size + (kAlignment - (size % kAlignment)) % kAlignment; |
| 8 | 8 |
| 9 const int kAlignment = 8; | 9 const int kAlignment = 8; |
| 10 const int kSerializedHandleSize = 4; | 10 const int kSerializedHandleSize = 4; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 result.encodeStructDataHeader(dataHeader); | 98 result.encodeStructDataHeader(dataHeader); |
| 99 return result; | 99 return result; |
| 100 } | 100 } |
| 101 | 101 |
| 102 Encoder getArrayEncoderAtOffset(ArrayDataHeader dataHeader) { | 102 Encoder getArrayEncoderAtOffset(ArrayDataHeader dataHeader) { |
| 103 var result = new Encoder._fromBuffer(_buffer); | 103 var result = new Encoder._fromBuffer(_buffer); |
| 104 result.encodeArrayDataHeader(dataHeader); | 104 result.encodeArrayDataHeader(dataHeader); |
| 105 return result; | 105 return result; |
| 106 } | 106 } |
| 107 | 107 |
| 108 Message get message => new Message(_buffer.trimmed, _buffer.handles); | 108 Message get message => new Message( |
| 109 _buffer.trimmed, _buffer.handles, _buffer.extent, _buffer.handles.length); |
| 109 | 110 |
| 110 void encodeStructDataHeader(StructDataHeader dataHeader) { | 111 void encodeStructDataHeader(StructDataHeader dataHeader) { |
| 111 _buffer.claimMemory(align(dataHeader.size)); | 112 _buffer.claimMemory(align(dataHeader.size)); |
| 112 encodeUint32(dataHeader.size, StructDataHeader.kSizeOffset); | 113 encodeUint32(dataHeader.size, StructDataHeader.kSizeOffset); |
| 113 encodeUint32(dataHeader.version, StructDataHeader.kVersionOffset); | 114 encodeUint32(dataHeader.version, StructDataHeader.kVersionOffset); |
| 114 } | 115 } |
| 115 | 116 |
| 116 void encodeArrayDataHeader(ArrayDataHeader dataHeader) { | 117 void encodeArrayDataHeader(ArrayDataHeader dataHeader) { |
| 117 _buffer.claimMemory(align(dataHeader.size)); | 118 _buffer.claimMemory(align(dataHeader.size)); |
| 118 encodeUint32(dataHeader.size, ArrayDataHeader.kSizeOffset); | 119 encodeUint32(dataHeader.size, ArrayDataHeader.kSizeOffset); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 void encodeInt64(int value, int offset) => | 164 void encodeInt64(int value, int offset) => |
| 164 _buffer.buffer.setInt64(_base + offset, value, Endianness.LITTLE_ENDIAN); | 165 _buffer.buffer.setInt64(_base + offset, value, Endianness.LITTLE_ENDIAN); |
| 165 | 166 |
| 166 void encodeUint64(int value, int offset) { | 167 void encodeUint64(int value, int offset) { |
| 167 if (value < 0) { | 168 if (value < 0) { |
| 168 throw new MojoCodecError('$kErrorUnsigned: $value'); | 169 throw new MojoCodecError('$kErrorUnsigned: $value'); |
| 169 } | 170 } |
| 170 _buffer.buffer.setUint64(_base + offset, value, Endianness.LITTLE_ENDIAN); | 171 _buffer.buffer.setUint64(_base + offset, value, Endianness.LITTLE_ENDIAN); |
| 171 } | 172 } |
| 172 | 173 |
| 173 void encodeFloat(double value, int offset) => _buffer.buffer.setFloat32( | 174 void encodeFloat(double value, int offset) => _buffer.buffer |
| 174 _base + offset, value, Endianness.LITTLE_ENDIAN); | 175 .setFloat32(_base + offset, value, Endianness.LITTLE_ENDIAN); |
| 175 | 176 |
| 176 void encodeDouble(double value, int offset) => _buffer.buffer.setFloat64( | 177 void encodeDouble(double value, int offset) => _buffer.buffer |
| 177 _base + offset, value, Endianness.LITTLE_ENDIAN); | 178 .setFloat64(_base + offset, value, Endianness.LITTLE_ENDIAN); |
| 178 | 179 |
| 179 void encodeHandle(core.MojoHandle value, int offset, bool nullable) { | 180 void encodeHandle(core.MojoHandle value, int offset, bool nullable) { |
| 180 if ((value == null) || !value.isValid) { | 181 if ((value == null) || !value.isValid) { |
| 181 encodeInvalideHandle(offset, nullable); | 182 encodeInvalideHandle(offset, nullable); |
| 182 } else { | 183 } else { |
| 183 encodeUint32(_buffer.handles.length, offset); | 184 encodeUint32(_buffer.handles.length, offset); |
| 184 _buffer.handles.add(value.pass()); | 185 _buffer.handles.add(value.pass()); |
| 185 } | 186 } |
| 186 } | 187 } |
| 187 | 188 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 encodeNullPointer(offset, nullable); | 269 encodeNullPointer(offset, nullable); |
| 269 return; | 270 return; |
| 270 } | 271 } |
| 271 encodePointerToNextUnclaimed(offset); | 272 encodePointerToNextUnclaimed(offset); |
| 272 value.encode(this); | 273 value.encode(this); |
| 273 } | 274 } |
| 274 | 275 |
| 275 void encodeUnion(Union value, int offset, bool nullable) { | 276 void encodeUnion(Union value, int offset, bool nullable) { |
| 276 if (value == null) { | 277 if (value == null) { |
| 277 if (!nullable) { | 278 if (!nullable) { |
| 278 throw new MojoCodecError( | 279 throw new MojoCodecError('Trying to encode a non-nullable null union.'); |
| 279 'Trying to encode a non-nullable null union.'); | |
| 280 } | 280 } |
| 281 encodeUint64(0, offset); | 281 encodeUint64(0, offset); |
| 282 encodeUint64(0, offset + 8); | 282 encodeUint64(0, offset + 8); |
| 283 return; | 283 return; |
| 284 } | 284 } |
| 285 value.encode(this, offset); | 285 value.encode(this, offset); |
| 286 } | 286 } |
| 287 | 287 |
| 288 void encodeEnum(MojoEnum value, int offset) => | 288 void encodeEnum(MojoEnum value, int offset) => |
| 289 encodeUint32(value.value, offset); | 289 encodeUint32(value.value, offset); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 var encoder = | 415 var encoder = |
| 416 encoderForArray(elementSize, value.length, offset, expectedLength); | 416 encoderForArray(elementSize, value.length, offset, expectedLength); |
| 417 for (int i = 0; i < value.length; ++i) { | 417 for (int i = 0; i < value.length; ++i) { |
| 418 int elementOffset = ArrayDataHeader.kHeaderSize + elementSize * i; | 418 int elementOffset = ArrayDataHeader.kHeaderSize + elementSize * i; |
| 419 elementEncoder( | 419 elementEncoder( |
| 420 encoder, value[i], elementOffset, isElementNullable(nullability)); | 420 encoder, value[i], elementOffset, isElementNullable(nullability)); |
| 421 } | 421 } |
| 422 } | 422 } |
| 423 | 423 |
| 424 void encodeHandleArray(List<core.MojoHandle> value, int offset, | 424 void encodeHandleArray(List<core.MojoHandle> value, int offset, |
| 425 int nullability, int expectedLength) => _handleArrayEncodeHelper( | 425 int nullability, int expectedLength) => |
| 426 (e, v, o, n) => e.encodeHandle(v, o, n), value, offset, | 426 _handleArrayEncodeHelper((e, v, o, n) => e.encodeHandle(v, o, n), value, |
| 427 kSerializedHandleSize, nullability, expectedLength); | 427 offset, kSerializedHandleSize, nullability, expectedLength); |
| 428 | 428 |
| 429 void encodeMessagePipeHandleArray(List<core.MojoMessagePipeEndpoint> value, | 429 void encodeMessagePipeHandleArray(List<core.MojoMessagePipeEndpoint> value, |
| 430 int offset, int nullability, int expectedLength) => | 430 int offset, int nullability, int expectedLength) => |
| 431 _handleArrayEncodeHelper( | 431 _handleArrayEncodeHelper( |
| 432 (e, v, o, n) => e.encodeMessagePipeHandle(v, o, n), value, offset, | 432 (e, v, o, n) => e.encodeMessagePipeHandle(v, o, n), |
| 433 kSerializedHandleSize, nullability, expectedLength); | 433 value, |
| 434 offset, |
| 435 kSerializedHandleSize, |
| 436 nullability, |
| 437 expectedLength); |
| 434 | 438 |
| 435 void encodeConsumerHandleArray(List<core.MojoDataPipeConsumer> value, | 439 void encodeConsumerHandleArray(List<core.MojoDataPipeConsumer> value, |
| 436 int offset, int nullability, int expectedLength) => | 440 int offset, int nullability, int expectedLength) => |
| 437 _handleArrayEncodeHelper((e, v, o, n) => e.encodeConsumerHandle(v, o, n), | 441 _handleArrayEncodeHelper((e, v, o, n) => e.encodeConsumerHandle(v, o, n), |
| 438 value, offset, kSerializedHandleSize, nullability, expectedLength); | 442 value, offset, kSerializedHandleSize, nullability, expectedLength); |
| 439 | 443 |
| 440 void encodeProducerHandleArray(List<core.MojoDataPipeProducer> value, | 444 void encodeProducerHandleArray(List<core.MojoDataPipeProducer> value, |
| 441 int offset, int nullability, int expectedLength) => | 445 int offset, int nullability, int expectedLength) => |
| 442 _handleArrayEncodeHelper((e, v, o, n) => e.encodeProducerHandle(v, o, n), | 446 _handleArrayEncodeHelper((e, v, o, n) => e.encodeProducerHandle(v, o, n), |
| 443 value, offset, kSerializedHandleSize, nullability, expectedLength); | 447 value, offset, kSerializedHandleSize, nullability, expectedLength); |
| 444 | 448 |
| 445 void encodeSharedBufferHandleArray(List<core.MojoSharedBuffer> value, | 449 void encodeSharedBufferHandleArray(List<core.MojoSharedBuffer> value, |
| 446 int offset, int nullability, int expectedLength) => | 450 int offset, int nullability, int expectedLength) => |
| 447 _handleArrayEncodeHelper( | 451 _handleArrayEncodeHelper( |
| 448 (e, v, o, n) => e.encodeSharedBufferHandle(v, o, n), value, offset, | 452 (e, v, o, n) => e.encodeSharedBufferHandle(v, o, n), |
| 449 kSerializedHandleSize, nullability, expectedLength); | 453 value, |
| 454 offset, |
| 455 kSerializedHandleSize, |
| 456 nullability, |
| 457 expectedLength); |
| 450 | 458 |
| 451 void encodeInterfaceRequestArray( | 459 void encodeInterfaceRequestArray( |
| 452 List<Proxy> value, int offset, int nullability, int expectedLength) => | 460 List<Proxy> value, int offset, int nullability, int expectedLength) => |
| 453 _handleArrayEncodeHelper( | 461 _handleArrayEncodeHelper( |
| 454 (e, v, o, n) => e.encodeInterfaceRequest(v, o, n), value, offset, | 462 (e, v, o, n) => e.encodeInterfaceRequest(v, o, n), |
| 455 kSerializedHandleSize, nullability, expectedLength); | 463 value, |
| 464 offset, |
| 465 kSerializedHandleSize, |
| 466 nullability, |
| 467 expectedLength); |
| 456 | 468 |
| 457 void encodeInterfaceArray( | 469 void encodeInterfaceArray( |
| 458 List<Stub> value, int offset, int nullability, int expectedLength) => | 470 List<Stub> value, int offset, int nullability, int expectedLength) => |
| 459 _handleArrayEncodeHelper((e, v, o, n) => e.encodeInterface(v, o, n), | 471 _handleArrayEncodeHelper((e, v, o, n) => e.encodeInterface(v, o, n), |
| 460 value, offset, kSerializedInterfaceSize, nullability, expectedLength); | 472 value, offset, kSerializedInterfaceSize, nullability, expectedLength); |
| 461 | 473 |
| 462 static Uint8List _utf8OfString(String s) => | 474 static Uint8List _utf8OfString(String s) => |
| 463 (new Uint8List.fromList((const Utf8Encoder()).convert(s))); | 475 (new Uint8List.fromList((const Utf8Encoder()).convert(s))); |
| 464 | 476 |
| 465 void encodeString(String value, int offset, bool nullable) { | 477 void encodeString(String value, int offset, bool nullable) { |
| 466 if (value == null) { | 478 if (value == null) { |
| 467 encodeNullPointer(offset, nullable); | 479 encodeNullPointer(offset, nullable); |
| 468 return; | 480 return; |
| 469 } | 481 } |
| 470 int nullability = nullable ? kArrayNullable : kNothingNullable; | 482 int nullability = nullable ? kArrayNullable : kNothingNullable; |
| 471 encodeUint8Array( | 483 encodeUint8Array( |
| 472 _utf8OfString(value), offset, nullability, kUnspecifiedArrayLength); | 484 _utf8OfString(value), offset, nullability, kUnspecifiedArrayLength); |
| 473 } | 485 } |
| 474 | 486 |
| 475 void appendBytes(Uint8List value) { | 487 void appendBytes(Uint8List value) { |
| 476 _buffer.buffer.buffer | 488 _buffer.buffer.buffer.asUint8List().setRange( |
| 477 .asUint8List() | 489 _base + ArrayDataHeader.kHeaderSize, |
| 478 .setRange(_base + ArrayDataHeader.kHeaderSize, | 490 _base + ArrayDataHeader.kHeaderSize + value.lengthInBytes, |
| 479 _base + ArrayDataHeader.kHeaderSize + value.lengthInBytes, value); | 491 value); |
| 480 } | 492 } |
| 481 | 493 |
| 482 void appendInt8Array(List<int> value) => | 494 void appendInt8Array(List<int> value) => |
| 483 appendBytes(new Uint8List.view(new Int8List.fromList(value).buffer)); | 495 appendBytes(new Uint8List.view(new Int8List.fromList(value).buffer)); |
| 484 | 496 |
| 485 void appendUint8Array(List<int> value) => | 497 void appendUint8Array(List<int> value) => |
| 486 appendBytes(new Uint8List.fromList(value)); | 498 appendBytes(new Uint8List.fromList(value)); |
| 487 | 499 |
| 488 void appendInt16Array(List<int> value) => | 500 void appendInt16Array(List<int> value) => |
| 489 appendBytes(new Uint8List.view(new Int16List.fromList(value).buffer)); | 501 appendBytes(new Uint8List.view(new Int16List.fromList(value).buffer)); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 } | 566 } |
| 555 } | 567 } |
| 556 | 568 |
| 557 class Decoder { | 569 class Decoder { |
| 558 _Validator _validator; | 570 _Validator _validator; |
| 559 Message _message; | 571 Message _message; |
| 560 int _base = 0; | 572 int _base = 0; |
| 561 | 573 |
| 562 Decoder(this._message, [this._base = 0, this._validator = null]) { | 574 Decoder(this._message, [this._base = 0, this._validator = null]) { |
| 563 if (_validator == null) { | 575 if (_validator == null) { |
| 564 _validator = new _Validator( | 576 _validator = new _Validator(_message.dataLength, _message.handlesLength); |
| 565 _message.buffer.lengthInBytes, _message.handles.length); | |
| 566 } | 577 } |
| 567 } | 578 } |
| 568 | 579 |
| 569 Decoder getDecoderAtPosition(int offset) => | 580 Decoder getDecoderAtPosition(int offset) => |
| 570 new Decoder(_message, offset, _validator); | 581 new Decoder(_message, offset, _validator); |
| 571 | 582 |
| 572 factory Decoder.atOffset(Decoder d, int offset, _Validator validator) => | 583 factory Decoder.atOffset(Decoder d, int offset, _Validator validator) => |
| 573 new Decoder(d._message, offset, validator); | 584 new Decoder(d._message, offset, validator); |
| 574 | 585 |
| 575 ByteData get _buffer => _message.buffer; | 586 ByteData get _buffer => _message.buffer; |
| 576 List<core.MojoHandle> get _handles => _message.handles; | 587 List<core.MojoHandle> get _handles => _message.handles; |
| 577 List<core.MojoHandle> get excessHandles => new List.from(_message.handles | 588 List<core.MojoHandle> get excessHandles { |
| 578 .getRange(_validator._minNextClaimedHandle, _message.handles.length)) | 589 if (_message.handlesLength == 0) return null; |
| 579 ..addAll(_validator._skippedIndices.map((i) => _message.handles[i])); | 590 var leftAtEnd = _message.handles |
| 591 .getRange(_validator._minNextClaimedHandle, _message.handlesLength); |
| 592 var skipped = _validator._skippedIndices.map((i) => _message.handles[i]); |
| 593 return new List.from(leftAtEnd)..addAll(skipped); |
| 594 } |
| 580 | 595 |
| 581 int decodeInt8(int offset) => _buffer.getInt8(_base + offset); | 596 int decodeInt8(int offset) => _buffer.getInt8(_base + offset); |
| 582 int decodeUint8(int offset) => _buffer.getUint8(_base + offset); | 597 int decodeUint8(int offset) => _buffer.getUint8(_base + offset); |
| 583 int decodeInt16(int offset) => | 598 int decodeInt16(int offset) => |
| 584 _buffer.getInt16(_base + offset, Endianness.LITTLE_ENDIAN); | 599 _buffer.getInt16(_base + offset, Endianness.LITTLE_ENDIAN); |
| 585 int decodeUint16(int offset) => | 600 int decodeUint16(int offset) => |
| 586 _buffer.getUint16(_base + offset, Endianness.LITTLE_ENDIAN); | 601 _buffer.getUint16(_base + offset, Endianness.LITTLE_ENDIAN); |
| 587 int decodeInt32(int offset) => | 602 int decodeInt32(int offset) => |
| 588 _buffer.getInt32(_base + offset, Endianness.LITTLE_ENDIAN); | 603 _buffer.getInt32(_base + offset, Endianness.LITTLE_ENDIAN); |
| 589 int decodeUint32(int offset) => | 604 int decodeUint32(int offset) => |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 } | 717 } |
| 703 return header; | 718 return header; |
| 704 } | 719 } |
| 705 | 720 |
| 706 List<bool> decodeBoolArray(int offset, int nullability, int expectedLength) { | 721 List<bool> decodeBoolArray(int offset, int nullability, int expectedLength) { |
| 707 Decoder d = decodePointer(offset, isArrayNullable(nullability)); | 722 Decoder d = decodePointer(offset, isArrayNullable(nullability)); |
| 708 if (d == null) { | 723 if (d == null) { |
| 709 return null; | 724 return null; |
| 710 } | 725 } |
| 711 var header = d.decodeDataHeaderForBoolArray(expectedLength); | 726 var header = d.decodeDataHeaderForBoolArray(expectedLength); |
| 712 var bytes = new Uint8List.view(d._buffer.buffer, | 727 var bytes = new Uint8List.view( |
| 728 d._buffer.buffer, |
| 713 d._buffer.offsetInBytes + d._base + ArrayDataHeader.kHeaderSize, | 729 d._buffer.offsetInBytes + d._base + ArrayDataHeader.kHeaderSize, |
| 714 (header.numElements + 7) ~/ kAlignment); | 730 (header.numElements + 7) ~/ kAlignment); |
| 715 var result = new List<bool>(header.numElements); | 731 var result = new List<bool>(header.numElements); |
| 716 for (int i = 0; i < bytes.lengthInBytes; ++i) { | 732 for (int i = 0; i < bytes.lengthInBytes; ++i) { |
| 717 for (int j = 0; j < kAlignment; ++j) { | 733 for (int j = 0; j < kAlignment; ++j) { |
| 718 int boolIndex = i * kAlignment + j; | 734 int boolIndex = i * kAlignment + j; |
| 719 if (boolIndex < result.length) { | 735 if (boolIndex < result.length) { |
| 720 result[boolIndex] = (bytes[i] & (1 << j)) != 0; | 736 result[boolIndex] = (bytes[i] & (1 << j)) != 0; |
| 721 } | 737 } |
| 722 } | 738 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 751 ArrayDataHeader decodeDataHeaderForEnumArray(int expectedLength) => | 767 ArrayDataHeader decodeDataHeaderForEnumArray(int expectedLength) => |
| 752 decodeDataHeaderForArray(kEnumSize, expectedLength); | 768 decodeDataHeaderForArray(kEnumSize, expectedLength); |
| 753 | 769 |
| 754 List decodeArray(Function arrayViewer, int elementSize, int offset, | 770 List decodeArray(Function arrayViewer, int elementSize, int offset, |
| 755 int nullability, int expectedLength) { | 771 int nullability, int expectedLength) { |
| 756 Decoder d = decodePointer(offset, isArrayNullable(nullability)); | 772 Decoder d = decodePointer(offset, isArrayNullable(nullability)); |
| 757 if (d == null) { | 773 if (d == null) { |
| 758 return null; | 774 return null; |
| 759 } | 775 } |
| 760 var header = d.decodeDataHeaderForArray(elementSize, expectedLength); | 776 var header = d.decodeDataHeaderForArray(elementSize, expectedLength); |
| 761 return arrayViewer(d._buffer.buffer, | 777 return arrayViewer( |
| 778 d._buffer.buffer, |
| 762 d._buffer.offsetInBytes + d._base + ArrayDataHeader.kHeaderSize, | 779 d._buffer.offsetInBytes + d._base + ArrayDataHeader.kHeaderSize, |
| 763 header.numElements); | 780 header.numElements).toList(); |
| 764 } | 781 } |
| 765 | 782 |
| 766 List<int> decodeInt8Array(int offset, int nullability, int expectedLength) => | 783 List<int> decodeInt8Array(int offset, int nullability, int expectedLength) => |
| 767 decodeArray((b, s, l) => new Int8List.view(b, s, l), 1, offset, | 784 decodeArray((b, s, l) => new Int8List.view(b, s, l), 1, offset, |
| 768 nullability, expectedLength); | 785 nullability, expectedLength); |
| 769 | 786 |
| 770 List<int> decodeUint8Array(int offset, int nullability, int expectedLength) => | 787 List<int> decodeUint8Array(int offset, int nullability, int expectedLength) => |
| 771 decodeArray((b, s, l) => new Uint8List.view(b, s, l), 1, offset, | 788 decodeArray((b, s, l) => new Uint8List.view(b, s, l), 1, offset, |
| 772 nullability, expectedLength); | 789 nullability, expectedLength); |
| 773 | 790 |
| 774 List<int> decodeInt16Array(int offset, int nullability, int expectedLength) => | 791 List<int> decodeInt16Array(int offset, int nullability, int expectedLength) => |
| 775 decodeArray((b, s, l) => new Int16List.view(b, s, l), 2, offset, | 792 decodeArray((b, s, l) => new Int16List.view(b, s, l), 2, offset, |
| 776 nullability, expectedLength); | 793 nullability, expectedLength); |
| 777 | 794 |
| 778 List<int> decodeUint16Array( | 795 List<int> decodeUint16Array( |
| 779 int offset, int nullability, int expectedLength) => decodeArray( | 796 int offset, int nullability, int expectedLength) => |
| 780 (b, s, l) => new Uint16List.view(b, s, l), 2, offset, nullability, | 797 decodeArray((b, s, l) => new Uint16List.view(b, s, l), 2, offset, |
| 781 expectedLength); | 798 nullability, expectedLength); |
| 782 | 799 |
| 783 List<int> decodeInt32Array(int offset, int nullability, int expectedLength) => | 800 List<int> decodeInt32Array(int offset, int nullability, int expectedLength) => |
| 784 decodeArray((b, s, l) => new Int32List.view(b, s, l), 4, offset, | 801 decodeArray((b, s, l) => new Int32List.view(b, s, l), 4, offset, |
| 785 nullability, expectedLength); | 802 nullability, expectedLength); |
| 786 | 803 |
| 787 List<int> decodeUint32Array( | 804 List<int> decodeUint32Array( |
| 788 int offset, int nullability, int expectedLength) => decodeArray( | 805 int offset, int nullability, int expectedLength) => |
| 789 (b, s, l) => new Uint32List.view(b, s, l), 4, offset, nullability, | 806 decodeArray((b, s, l) => new Uint32List.view(b, s, l), 4, offset, |
| 790 expectedLength); | 807 nullability, expectedLength); |
| 791 | 808 |
| 792 List<int> decodeInt64Array(int offset, int nullability, int expectedLength) => | 809 List<int> decodeInt64Array(int offset, int nullability, int expectedLength) => |
| 793 decodeArray((b, s, l) => new Int64List.view(b, s, l), 8, offset, | 810 decodeArray((b, s, l) => new Int64List.view(b, s, l), 8, offset, |
| 794 nullability, expectedLength); | 811 nullability, expectedLength); |
| 795 | 812 |
| 796 List<int> decodeUint64Array( | 813 List<int> decodeUint64Array( |
| 797 int offset, int nullability, int expectedLength) => decodeArray( | 814 int offset, int nullability, int expectedLength) => |
| 798 (b, s, l) => new Uint64List.view(b, s, l), 8, offset, nullability, | 815 decodeArray((b, s, l) => new Uint64List.view(b, s, l), 8, offset, |
| 799 expectedLength); | 816 nullability, expectedLength); |
| 800 | 817 |
| 801 List<double> decodeFloatArray( | 818 List<double> decodeFloatArray( |
| 802 int offset, int nullability, int expectedLength) => decodeArray( | 819 int offset, int nullability, int expectedLength) => |
| 803 (b, s, l) => new Float32List.view(b, s, l), 4, offset, nullability, | 820 decodeArray((b, s, l) => new Float32List.view(b, s, l), 4, offset, |
| 804 expectedLength); | 821 nullability, expectedLength); |
| 805 | 822 |
| 806 List<double> decodeDoubleArray( | 823 List<double> decodeDoubleArray( |
| 807 int offset, int nullability, int expectedLength) => decodeArray( | 824 int offset, int nullability, int expectedLength) => |
| 808 (b, s, l) => new Float64List.view(b, s, l), 8, offset, nullability, | 825 decodeArray((b, s, l) => new Float64List.view(b, s, l), 8, offset, |
| 809 expectedLength); | 826 nullability, expectedLength); |
| 810 | 827 |
| 811 List _handleArrayDecodeHelper(Function elementDecoder, int offset, | 828 List _handleArrayDecodeHelper(Function elementDecoder, int offset, |
| 812 int elementSize, int nullability, int expectedLength) { | 829 int elementSize, int nullability, int expectedLength) { |
| 813 Decoder d = decodePointer(offset, isArrayNullable(nullability)); | 830 Decoder d = decodePointer(offset, isArrayNullable(nullability)); |
| 814 if (d == null) { | 831 if (d == null) { |
| 815 return null; | 832 return null; |
| 816 } | 833 } |
| 817 var header = d.decodeDataHeaderForArray(elementSize, expectedLength); | 834 var header = d.decodeDataHeaderForArray(elementSize, expectedLength); |
| 818 var result = new List(header.numElements); | 835 var result = new List(header.numElements); |
| 819 for (int i = 0; i < result.length; ++i) { | 836 for (int i = 0; i < result.length; ++i) { |
| 820 result[i] = elementDecoder(d, | 837 result[i] = elementDecoder( |
| 838 d, |
| 821 ArrayDataHeader.kHeaderSize + elementSize * i, | 839 ArrayDataHeader.kHeaderSize + elementSize * i, |
| 822 isElementNullable(nullability)); | 840 isElementNullable(nullability)); |
| 823 } | 841 } |
| 824 return result; | 842 return result; |
| 825 } | 843 } |
| 826 | 844 |
| 827 List<core.MojoHandle> decodeHandleArray( | 845 List<core.MojoHandle> decodeHandleArray( |
| 828 int offset, int nullability, int expectedLength) => | 846 int offset, int nullability, int expectedLength) => |
| 829 _handleArrayDecodeHelper((d, o, n) => d.decodeHandle(o, n), offset, | 847 _handleArrayDecodeHelper((d, o, n) => d.decodeHandle(o, n), offset, |
| 830 kSerializedHandleSize, nullability, expectedLength); | 848 kSerializedHandleSize, nullability, expectedLength); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 845 offset, kSerializedHandleSize, nullability, expectedLength); | 863 offset, kSerializedHandleSize, nullability, expectedLength); |
| 846 | 864 |
| 847 List<core.MojoSharedBuffer> decodeSharedBufferHandleArray( | 865 List<core.MojoSharedBuffer> decodeSharedBufferHandleArray( |
| 848 int offset, int nullability, int expectedLength) => | 866 int offset, int nullability, int expectedLength) => |
| 849 _handleArrayDecodeHelper((d, o, n) => d.decodeSharedBufferHandle(o, n), | 867 _handleArrayDecodeHelper((d, o, n) => d.decodeSharedBufferHandle(o, n), |
| 850 offset, kSerializedHandleSize, nullability, expectedLength); | 868 offset, kSerializedHandleSize, nullability, expectedLength); |
| 851 | 869 |
| 852 List<Stub> decodeInterfaceRequestArray(int offset, int nullability, | 870 List<Stub> decodeInterfaceRequestArray(int offset, int nullability, |
| 853 int expectedLength, Function interfaceFactory) => | 871 int expectedLength, Function interfaceFactory) => |
| 854 _handleArrayDecodeHelper( | 872 _handleArrayDecodeHelper( |
| 855 (d, o, n) => d.decodeInterfaceRequest(o, n, interfaceFactory), offset, | 873 (d, o, n) => d.decodeInterfaceRequest(o, n, interfaceFactory), |
| 856 kSerializedHandleSize, nullability, expectedLength); | 874 offset, |
| 875 kSerializedHandleSize, |
| 876 nullability, |
| 877 expectedLength); |
| 857 | 878 |
| 858 List<Proxy> decodeServiceInterfaceArray(int offset, int nullability, | 879 List<Proxy> decodeServiceInterfaceArray(int offset, int nullability, |
| 859 int expectedLength, Function clientFactory) => _handleArrayDecodeHelper( | 880 int expectedLength, Function clientFactory) => |
| 860 (d, o, n) => d.decodeServiceInterface(o, n, clientFactory), offset, | 881 _handleArrayDecodeHelper( |
| 861 kSerializedInterfaceSize, nullability, expectedLength); | 882 (d, o, n) => d.decodeServiceInterface(o, n, clientFactory), |
| 862 | 883 offset, |
| 863 static String _stringOfUtf8(Uint8List bytes) => | 884 kSerializedInterfaceSize, |
| 864 (const Utf8Decoder()).convert(bytes.toList()); | 885 nullability, |
| 886 expectedLength); |
| 865 | 887 |
| 866 String decodeString(int offset, bool nullable) { | 888 String decodeString(int offset, bool nullable) { |
| 867 int nullability = nullable ? kArrayNullable : 0; | 889 int nullability = nullable ? kArrayNullable : 0; |
| 868 var bytes = decodeUint8Array(offset, nullability, kUnspecifiedArrayLength); | 890 var bytes = decodeUint8Array(offset, nullability, kUnspecifiedArrayLength); |
| 869 if (bytes == null) { | 891 if (bytes == null) { |
| 870 return null; | 892 return null; |
| 871 } | 893 } |
| 872 return _stringOfUtf8(bytes); | 894 return (const Utf8Decoder()).convert(bytes); |
| 873 } | 895 } |
| 874 | 896 |
| 875 StructDataHeader decodeDataHeaderForMap() { | 897 StructDataHeader decodeDataHeaderForMap() { |
| 876 var header = decodeStructDataHeader(); | 898 var header = decodeStructDataHeader(); |
| 877 if (header.size != kMapStructHeader.size) { | 899 if (header.size != kMapStructHeader.size) { |
| 878 throw new MojoCodecError( | 900 throw new MojoCodecError( |
| 879 'Incorrect header for map. The size is incorrect.'); | 901 'Incorrect header for map. The size is incorrect.'); |
| 880 } | 902 } |
| 881 if (header.version != kMapStructHeader.version) { | 903 if (header.version != kMapStructHeader.version) { |
| 882 throw new MojoCodecError( | 904 throw new MojoCodecError( |
| 883 'Incorrect header for map. The version is incorrect.'); | 905 'Incorrect header for map. The version is incorrect.'); |
| 884 } | 906 } |
| 885 return header; | 907 return header; |
| 886 } | 908 } |
| 887 } | 909 } |
| OLD | NEW |