Index: mojo/public/dart/src/codec.dart |
diff --git a/mojo/public/dart/src/codec.dart b/mojo/public/dart/src/codec.dart |
deleted file mode 100644 |
index d5f5b90bd83f6f39b18bd7cfd0035c5e0a6855d7..0000000000000000000000000000000000000000 |
--- a/mojo/public/dart/src/codec.dart |
+++ /dev/null |
@@ -1,731 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-part of bindings; |
- |
-int align(int size) => size + (kAlignment - (size % kAlignment)) % kAlignment; |
- |
-const int kAlignment = 8; |
-const int kSerializedHandleSize = 4; |
-const int kPointerSize = 8; |
-const DataHeader kMapStructHeader = const DataHeader(24, 2); |
-const int kUnspecifiedArrayLength = -1; |
-const int kNothingNullable = 0; |
-const int kArrayNullable = (1 << 0); |
-const int kElementNullable = (1 << 1); |
- |
-bool isArrayNullable(int nullability) => (nullability & kArrayNullable) > 0; |
-bool isElementNullable(int nullability) => (nullability & kElementNullable) > 0; |
- |
-class _EncoderBuffer { |
- ByteData buffer; |
- List<core.MojoHandle> handles; |
- int extent; |
- |
- static const int kInitialBufferSize = 1024; |
- |
- _EncoderBuffer([int size = -1]) : |
- buffer = new ByteData(size > 0 ? size : kInitialBufferSize), |
- handles = [], |
- extent = 0; |
- |
- void _grow(int newSize) { |
- Uint8List newBuffer = new Uint8List(newSize); |
- newBuffer.setRange(0, buffer.lengthInBytes, buffer.buffer.asUint8List()); |
- buffer = newBuffer.buffer.asByteData(); |
- } |
- |
- void claimMemory(int claimSize) { |
- extent += claimSize; |
- if (extent > buffer.lengthInBytes) { |
- int newSize = buffer.lengthInBytes + claimSize; |
- newSize += newSize ~/ 2; |
- _grow(newSize); |
- } |
- } |
- |
- ByteData get trimmed => new ByteData.view(buffer.buffer, 0, extent); |
-} |
- |
-class Encoder { |
- _EncoderBuffer _buffer; |
- int _base; |
- |
- Encoder([int size = -1]) : _buffer = new _EncoderBuffer(size), _base = 0; |
- |
- Encoder._fromBuffer(_EncoderBuffer buffer) : |
- _buffer = buffer, |
- _base = buffer.extent; |
- |
- Encoder getEncoderAtOffset(DataHeader dataHeader) { |
- var result = new Encoder._fromBuffer(_buffer); |
- result.encodeDataHeader(dataHeader); |
- return result; |
- } |
- |
- Message get message => new Message(_buffer.trimmed, _buffer.handles); |
- |
- void encodeDataHeader(DataHeader dataHeader) { |
- _buffer.claimMemory(align(dataHeader.size)); |
- encodeUint32(dataHeader.size, DataHeader.kSizeOffset); |
- encodeUint32(dataHeader.numFields, DataHeader.kNumFieldsOffset); |
- } |
- |
- static const String kErrorUnsigned = |
- 'Passing negative value to unsigned encoder'; |
- |
- void encodeBool(bool value, int offset, int bit) { |
- if (value) { |
- int encodedValue = _buffer.buffer.getUint8(_base + offset); |
- encodedValue |= (1 << bit); |
- _buffer.buffer.setUint8(_base + offset, encodedValue); |
- } |
- } |
- |
- void encodeInt8(int value, int offset) => |
- _buffer.buffer.setInt8(_base + offset, value); |
- |
- void encodeUint8(int value, int offset) { |
- if (value < 0) { |
- throw '$kErrorUnsigned: $val'; |
- } |
- _buffer.buffer.setUint8(_base + offset, value); |
- } |
- |
- void encodeInt16(int value, int offset) => |
- _buffer.buffer.setInt16(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- |
- void encodeUint16(int value, int offset) { |
- if (value < 0) { |
- throw '$kErrorUnsigned: $val'; |
- } |
- _buffer.buffer.setUint16(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- } |
- |
- void encodeInt32(int value, int offset) => |
- _buffer.buffer.setInt32(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- |
- void encodeUint32(int value, int offset) { |
- if (value < 0) { |
- throw '$kErrorUnsigned: $val'; |
- } |
- _buffer.buffer.setUint32(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- } |
- |
- void encodeInt64(int value, int offset) => |
- _buffer.buffer.setInt64(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- |
- void encodeUint64(int value, int offset) { |
- if (value < 0) { |
- throw '$kErrorUnsigned: $val'; |
- } |
- _buffer.buffer.setUint64(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- } |
- |
- void encodeFloat(double value, int offset) => |
- _buffer.buffer.setFloat32(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- |
- void encodeDouble(double value, int offset) => |
- _buffer.buffer.setFloat64(_base + offset, value, Endianness.LITTLE_ENDIAN); |
- |
- void encodeHandle(core.MojoHandle value, int offset, bool nullable) { |
- if ((value == null) || !value.isValid) { |
- encodeInvalideHandle(offset, nullable); |
- } else { |
- encodeUint32(_buffer.handles.length, offset); |
- _buffer.handles.add(value); |
- } |
- } |
- |
- void encodeMessagePipeHandle( |
- core.MojoMessagePipeEndpoint value, int offset, bool nullable) => |
- encodeHandle(value != null ? value.handle : null, offset, nullable); |
- |
- void encodeConsumerHandle( |
- core.MojoDataPipeConsumer value, int offset, bool nullable) => |
- encodeHandle(value != null ? value.handle : null, offset, nullable); |
- |
- void encodeProducerHandle( |
- core.MojoDataPipeProducer value, int offset, bool nullable) => |
- encodeHandle(value != null ? value.handle : null, offset, nullable); |
- |
- void encodeSharedBufferHandle( |
- core.MojoSharedBuffer value, int offset, bool nullable) => |
- encodeHandle(value != null ? value.handle : null, offset, nullable); |
- |
- void encodeInterface(Interface interface, int offset, bool nullable) { |
- if (interface == null) { |
- encodeInvalideHandle(offset, nullable); |
- return; |
- } |
- var pipe = new core.MojoMessagePipe(); |
- interface.bind(pipe.endpoints[0]); |
- encodeMessagePipeHandle(pipe.endpoints[1], offset, nullable); |
- } |
- |
- void encodeInterfaceRequest(Client client, int offset, bool nullable) { |
- if (client == null) { |
- encodeInvalideHandle(offset, nullable); |
- return; |
- } |
- var pipe = new core.MojoMessagePipe(); |
- client.bind(pipe.endpoints[0]); |
- encodeMessagePipeHandle(pipe.endpoints[1], offset, nullable); |
- } |
- |
- void encodeNullPointer(int offset, bool nullable) { |
- if (!nullable) { |
- throw 'Trying to encode a null pointer for a non-nullable type'; |
- } |
- _buffer.buffer.setUint64(_base + offset, 0, Endianness.LITTLE_ENDIAN); |
- } |
- |
- void encodeInvalideHandle(int offset, bool nullable) { |
- if (!nullable) { |
- throw 'Trying to encode a null pointer for a non-nullable type'; |
- } |
- _buffer.buffer.setInt32(_base + offset, -1, Endianness.LITTLE_ENDIAN); |
- } |
- |
- void encodePointerToNextUnclaimed(int offset) => |
- encodeUint64(_buffer.extent - (_base + offset), offset); |
- |
- void encodeStruct(Struct value, int offset, bool nullable) { |
- if (value == null) { |
- encodeNullPointer(offset, nullable); |
- return; |
- } |
- encodePointerToNextUnclaimed(offset); |
- value.encode(this); |
- } |
- |
- Encoder encodePointerArray(int length, int offset, int expectedLength) => |
- encoderForArray(kPointerSize, length, offset, expectedLength); |
- |
- Encoder encoderForArray( |
- int elementSize, int length, int offset, int expectedLength) { |
- if ((expectedLength != kUnspecifiedArrayLength) && |
- (expectedLength != length)) { |
- throw 'Trying to encode a fixed array of incorrect length'; |
- } |
- return encoderForArrayByTotalSize(length * elementSize, length, offset); |
- } |
- |
- Encoder encoderForArrayByTotalSize(int size, int length, int offset) { |
- encodePointerToNextUnclaimed(offset); |
- return getEncoderAtOffset( |
- new DataHeader(DataHeader.kHeaderSize + size, length)); |
- } |
- |
- void encodeBoolArray( |
- List<bool> value, int offset, int nullability, int expectedLength) { |
- if (value == null) { |
- encodeNullPointer(offset, isArrayNullable(nullability)); |
- return; |
- } |
- if ((expectedLength != kUnspecifiedArrayLength) && |
- (expectedLength != value.length)) { |
- throw 'Trying to encode a fixed array of incorrect size.'; |
- } |
- var bytes = new Uint8List((value.length + 7) ~/ kAlignment); |
- for (int i = 0; i < bytes.length; ++i) { |
- for (int j = 0; j < kAlignment; ++j) { |
- int boolIndex = kAlignment * i + j; |
- if ((boolIndex < value.length) && value[boolIndex]) { |
- bytes[i] |= (1 << j); |
- } |
- } |
- } |
- var encoder = encoderForArrayByTotalSize( |
- bytes.length, value.length, offset); |
- encoder.appendUint8Array(bytes); |
- } |
- |
- void encodeArray(Function arrayAppend, |
- int elementBytes, |
- List<int> value, |
- int offset, |
- int nullability, |
- int expectedLength) { |
- if (value == null) { |
- encodeNullPointer(offset, isArrayNullable(nullability)); |
- return; |
- } |
- var encoder = encoderForArray( |
- elementBytes, value.length, offset, expectedLength); |
- arrayAppend(encoder, value); |
- } |
- |
- void encodeInt8Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendInt8Array(v), |
- 1, value, offset, nullability, expectedLength); |
- |
- void encodeUint8Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendUint8Array(v), |
- 1, value, offset, nullability, expectedLength); |
- |
- void encodeInt16Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendInt16Array(v), |
- 2, value, offset, nullability, expectedLength); |
- |
- void encodeUint16Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendUint16Array(v), |
- 2, value, offset, nullability, expectedLength); |
- |
- void encodeInt32Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendInt32Array(v), |
- 4, value, offset, nullability, expectedLength); |
- |
- void encodeUint32Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendUint32Array(v), |
- 4, value, offset, nullability, expectedLength); |
- |
- void encodeInt64Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendInt64Array(v), |
- 8, value, offset, nullability, expectedLength); |
- |
- void encodeUint64Array( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendUint64Array(v), |
- 8, value, offset, nullability, expectedLength); |
- |
- void encodeFloatArray( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendFloatArray(v), |
- 4, value, offset, nullability, expectedLength); |
- |
- void encodeDoubleArray( |
- List<int> value, int offset, int nullability, int expectedLength) => |
- encodeArray((e, v) => e.appendDoubleArray(v), |
- 8, value, offset, nullability, expectedLength); |
- |
- void _handleArrayEncodeHelper(Function elementEncoder, |
- List value, |
- int offset, |
- int nullability, |
- int expectedLength) { |
- if (value == null) { |
- encodeNullPointer(offset, isArrayNullable(nullability)); |
- return; |
- } |
- var encoder = encoderForArray( |
- kSerializedHandleSize, value.length, offset, expectedLength); |
- for (int i = 0; i < value.length; ++i) { |
- int handleOffset = DataHeader.kHeaderSize + kSerializedHandleSize * i; |
- elementEncoder( |
- encoder, value[i], handleOffset, isElementNullable(nullability)); |
- } |
- } |
- |
- void encodeHandleArray( |
- List<core.MojoHandle> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeHandle(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- void encodeMessagePipeHandleArray( |
- List<core.MojoMessagePipeEndpoint> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeMessagePipeHandle(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- void encodeConsumerHandleArray( |
- List<core.MojoDataPipeConsumer> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeConsumerHandle(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- void encodeProducerHandleArray( |
- List<core.MojoDataPipeProducer> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeProducerHandle(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- void encodeSharedBufferHandleArray( |
- List<core.MojoSharedBuffer> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeSharedBufferHandle(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- void encodeInterfaceRequestArray( |
- List<Client> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeInterfaceRequest(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- void encodeInterfaceArray( |
- List<Interface> value, |
- int offset, |
- int nullability, |
- int expectedLength) => |
- _handleArrayEncodeHelper( |
- (e, v, o, n) => e.encodeInterface(v, o, n), |
- value, offset, nullability, expectedLength); |
- |
- static Uint8List _utf8OfString(String s) => |
- (new Uint8List.fromList((const Utf8Encoder()).convert(s))); |
- |
- void encodeString(String value, int offset, bool nullable) { |
- if (value == null) { |
- encodeNullPointer(offset, nullable); |
- return; |
- } |
- int nullability = nullable ? kArrayNullable : kNothingNullable; |
- encodeUint8Array(_utf8OfString(value), |
- offset, |
- nullability, |
- kUnspecifiedArrayLength); |
- } |
- |
- void appendBytes(Uint8List value) { |
- _buffer.buffer.buffer.asUint8List().setRange( |
- _base + DataHeader.kHeaderSize, |
- _base + DataHeader.kHeaderSize + value.lengthInBytes, |
- value); |
- } |
- |
- void appendInt8Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Int8List.fromList(value))); |
- |
- void appendUint8Array(List<int> value) => |
- appendBytes(new Uint8List.fromList(value)); |
- |
- void appendInt16Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Int16List.fromList(value))); |
- |
- void appendUint16Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Uint16List.fromList(value))); |
- |
- void appendInt32Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Int32List.fromList(value))); |
- |
- void appendUint32Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Uint32List.fromList(value))); |
- |
- void appendInt64Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Int64List.fromList(value))); |
- |
- void appendUint64Array(List<int> value) => |
- appendBytes(new Uint8List.view(new Uint64List.fromList(value))); |
- |
- void appendFloatArray(List<int> value) => |
- appendBytes(new Uint8List.view(new Float32List.fromList(value))); |
- |
- void appendDoubleArray(List<int> value) => |
- appendBytes(new Uint8List.view(new Float64List.fromList(value))); |
- |
- Encoder encoderForMap(int offset) { |
- encodePointerToNextUnclaimed(offset); |
- return getEncoderAtOffset(kMapStructHeader); |
- } |
-} |
- |
- |
-class Decoder { |
- Message _message; |
- int _base = 0; |
- |
- Decoder(this._message, [this._base = 0]); |
- |
- Decoder getDecoderAtPosition(int offset) => new Decoder(_message, offset); |
- |
- factory Decoder.atOffset(Decoder d, int offset) => |
- new Decoder(d._message, offset); |
- |
- ByteData get _buffer => _message.buffer; |
- List<core.MojoHandle> get _handles => _message.handles; |
- |
- int decodeInt8(int offset) => _buffer.getInt8(_base + offset); |
- int decodeUint8(int offset) => _buffer.getUint8(_base + offset); |
- int decodeInt16(int offset) => |
- _buffer.getInt16(_base + offset, Endianness.LITTLE_ENDIAN); |
- int decodeUint16(int offset) => |
- _buffer.getUint16(_base + offset, Endianness.LITTLE_ENDIAN); |
- int decodeInt32(int offset) => |
- _buffer.getInt32(_base + offset, Endianness.LITTLE_ENDIAN); |
- int decodeUint32(int offset) => |
- _buffer.getUint32(_base + offset, Endianness.LITTLE_ENDIAN); |
- int decodeInt64(int offset) => |
- _buffer.getInt64(_base + offset, Endianness.LITTLE_ENDIAN); |
- int decodeUint64(int offset) => |
- _buffer.getUint64(_base + offset,Endianness.LITTLE_ENDIAN); |
- double decodeFloat(int offset) => |
- _buffer.getFloat32(_base + offset, Endianness.LITTLE_ENDIAN); |
- double decodeDouble(int offset) => |
- _buffer.getFloat64(_base + offset, Endianness.LITTLE_ENDIAN); |
- |
- bool decodeBool(int offset, int bit) => |
- (decodeUint8(offset) & (1 << bit)) != 0; |
- |
- core.MojoHandle decodeHandle(int offset, bool nullable) { |
- int index = decodeInt32(offset); |
- if (index == -1) { |
- if (!nullable) { |
- throw 'Trying to decode an invalid handle from a non-nullable type.'; |
- } |
- return new core.MojoHandle(core.MojoHandle.INVALID); |
- } |
- return _handles[index]; |
- } |
- |
- core.MojoMessagePipeEndpoint decodeMessagePipeHandle( |
- int offset, bool nullable) => |
- new core.MojoMessagePipeEndpoint(decodeHandle(offset, nullable)); |
- |
- core.MojoDataPipeConsumer decodeConsumerHandle(int offset, bool nullable) => |
- new core.MojoDataPipeConsumer(decodeHandle(offset, nullable)); |
- |
- core.MojoDataPipeProducer decodeProducerHandle(int offset, bool nullable) => |
- new core.MojoDataPipeProducer(decodeHandle(offset, nullable)); |
- |
- core.MojoSharedBuffer decodeSharedBufferHandle(int offset, bool nullable) => |
- new core.MojoSharedBuffer(decodeHandle(offset, nullable)); |
- |
- Client decodeServiceInterface( |
- int offset, bool nullable, Function clientFactory) { |
- var endpoint = decodeMessagePipeHandle(offset, nullable); |
- return endpoint.handle.isValid ? clientFactory(endpoint) : null; |
- } |
- |
- Interface decodeInterfaceRequest( |
- int offset, bool nullable, Function interfaceFactory) { |
- var endpoint = decodeMessagePipeHandle(offset, nullable); |
- return endpoint.handle.isValid ? interfaceFactory(endpoint) : null; |
- } |
- |
- Decoder decodePointer(int offset, bool nullable) { |
- int basePosition = _base + offset; |
- int pointerOffset = decodeUint64(offset); |
- if (pointerOffset == 0) { |
- if (!nullable) { |
- throw 'Trying to decode a null pointer for a non-nullable type'; |
- } |
- return null; |
- } |
- int newPosition = (basePosition + pointerOffset); |
- return new Decoder.atOffset(this, newPosition); |
- } |
- |
- DataHeader decodeDataHeader() { |
- int size = decodeUint32(DataHeader.kSizeOffset); |
- int numFields = decodeUint32(DataHeader.kNumFieldsOffset); |
- return new DataHeader(size, numFields); |
- } |
- |
- // Decode arrays. |
- DataHeader decodeDataHeaderForBoolArray(int expectedLength) { |
- var header = decodeDataHeader(); |
- if (header.size < DataHeader.kHeaderSize + (header.numFields + 7) ~/ 8) { |
- throw 'Array header is incorrect'; |
- } |
- if ((expectedLength != kUnspecifiedArrayLength) && |
- (header.numFields != expectedLength)) { |
- throw 'Incorrect array length'; |
- } |
- return header; |
- } |
- |
- List<bool> decodeBoolArray(int offset, int nullability, int expectedLength) { |
- Decoder d = decodePointer(offset, isArrayNullable(nullability)); |
- if (d == null) { |
- return null; |
- } |
- var header = d.decodeDataHeaderForBoolArray(expectedLength); |
- var bytes = new Uint8List.view( |
- d._buffer.buffer, |
- d._buffer.offsetInBytes + d._base + DataHeader.kHeaderSize, |
- (header.numFields + 7) ~/ kAlignment); |
- var result = new List<bool>(header.numFields); |
- for (int i = 0; i < bytes.lengthInBytes; ++i) { |
- for (int j = 0; j < kAlignment; ++j) { |
- int boolIndex = i * kAlignment + j; |
- if (boolIndex < result.length) { |
- result[boolIndex] = (bytes[i] & (1 << j)) != 0; |
- } |
- } |
- } |
- return result; |
- } |
- |
- DataHeader decodeDataHeaderForArray(int elementSize, int expectedLength) { |
- var header = decodeDataHeader(); |
- if (header.size < DataHeader.kHeaderSize + header.numFields * elementSize) { |
- throw 'Array header is incorrect: $header, elementSize = $elementSize'; |
- } |
- if ((expectedLength != kUnspecifiedArrayLength) && |
- (header.numFields != expectedLength)) { |
- throw 'Incorrect array length.'; |
- } |
- return header; |
- } |
- |
- DataHeader decodeDataHeaderForPointerArray(int expectedLength) => |
- decodeDataHeaderForArray(kPointerSize, expectedLength); |
- |
- List<int> decodeArray(Function arrayViewer, |
- int elementSize, |
- int offset, |
- int nullability, |
- int expectedLength) { |
- Decoder d = decodePointer(offset, isArrayNullable(nullability)); |
- if (d == null) { |
- return null; |
- } |
- var header = d.decodeDataHeaderForArray(elementSize, expectedLength); |
- return arrayViewer( |
- d._buffer.buffer, |
- d._buffer.offsetInBytes + d._base + DataHeader.kHeaderSize, |
- header.numFields); |
- } |
- |
- List<int> decodeInt8Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Int8List.view(b, s, l), |
- 1, offset, nullability, expectedLength); |
- |
- List<int> decodeUint8Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Uint8List.view(b, s, l), |
- 1, offset, nullability, expectedLength); |
- |
- List<int> decodeInt16Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Int16List.view(b, s, l), |
- 2, offset, nullability, expectedLength); |
- |
- List<int> decodeUint16Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Uint16List.view(b, s, l), |
- 2, offset, nullability, expectedLength); |
- |
- List<int> decodeInt32Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Int32List.view(b, s, l), |
- 4, offset, nullability, expectedLength); |
- |
- List<int> decodeUint32Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Uint32List.view(b, s, l), |
- 4, offset, nullability, expectedLength); |
- |
- List<int> decodeInt64Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Int64List.view(b, s, l), |
- 8, offset, nullability, expectedLength); |
- |
- List<int> decodeUint64Array( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Uint64List.view(b, s, l), |
- 8, offset, nullability, expectedLength); |
- |
- List<double> decodeFloatArray( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Float32List.view(b, s, l), |
- 4, offset, nullability, expectedLength); |
- |
- List<double> decodeDoubleArray( |
- int offset, int nullability, int expectedLength) => |
- decodeArray((b, s, l) => new Float64List.view(b, s, l), |
- 8, offset, nullability, expectedLength); |
- |
- List _handleArrayDecodeHelper(Function elementDecoder, |
- int offset, |
- int nullability, |
- int expectedLength) { |
- Decoder d = decodePointer(offset, isArrayNullable(nullability)); |
- if (d == null) { |
- return null; |
- } |
- var header = d.decodeDataHeaderForArray(4, expectedLength); |
- var result = new List(header.numFields); |
- for (int i = 0; i < result.length; ++i) { |
- result[i] = elementDecoder( |
- d, |
- DataHeader.kHeaderSize + kSerializedHandleSize * i, |
- isElementNullable(nullability)); |
- } |
- return result; |
- |
- } |
- |
- List<core.MojoHandle> decodeHandleArray( |
- int offset, int nullability, int expectedLength) => |
- _handleArrayDecodeHelper((d, o, n) => d.decodeHandle(o, n), |
- offset, nullability, expectedLength); |
- |
- List<core.MojoDataPipeConsumer> decodeConsumerHandleArray( |
- int offset, int nullability, int expectedLength) => |
- _handleArrayDecodeHelper((d, o, n) => d.decodeConsumerHandle(o, n), |
- offset, nullability, expectedLength); |
- |
- List<core.MojoDataPipeProducer> decodeProducerHandleArray( |
- int offset, int nullability, int expectedLength) => |
- _handleArrayDecodeHelper((d, o, n) => d.decodeProducerHandle(o, n), |
- offset, nullability, expectedLength); |
- |
- List<core.MojoMessagePipeEndpoint> decodeMessagePipeHandleArray( |
- int offset, int nullability, int expectedLength) => |
- _handleArrayDecodeHelper((d, o, n) => d.decodeMessagePipeHandle(o, n), |
- offset, nullability, expectedLength); |
- |
- List<core.MojoSharedBuffer> decodeSharedBufferHandleArray( |
- int offset, int nullability, int expectedLength) => |
- _handleArrayDecodeHelper((d, o, n) => d.decodeSharedBufferHandle(o, n), |
- offset, nullability, expectedLength); |
- |
- List<Interface> decodeInterfaceRequestArray( |
- int offset, |
- int nullability, |
- int expectedLength, |
- Function interfaceFactory) => |
- _handleArrayDecodeHelper( |
- (d, o, n) => d.decodeInterfaceRequest(o, n, interfaceFactory), |
- offset, nullability, expectedLength); |
- |
- List<Client> decodeServiceInterfaceArray( |
- int offset, |
- int nullability, |
- int expectedLength, |
- Function clientFactory) => |
- _handleArrayDecodeHelper( |
- (d, o, n) => d.decodeServiceInterface(o, n, clientFactory), |
- offset, nullability, expectedLength); |
- |
- static String _stringOfUtf8(Uint8List bytes) => |
- (const Utf8Decoder()).convert(bytes.toList()); |
- |
- String decodeString(int offset, bool nullable) { |
- int nullability = nullable ? kArrayNullable : 0; |
- var bytes = decodeUint8Array(offset, nullability, kUnspecifiedArrayLength); |
- if (bytes == null) { |
- return null; |
- } |
- return _stringOfUtf8(bytes); |
- } |
-} |