blob: 6652a3cf34ce9486e7e0a9b6492783e58d3981dd [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:_js_helper' show patch;
import 'dart:_native_typed_data';
import "dart:_internal" show UnmodifiableListBase;
@patch
class ByteData {
@patch
factory ByteData(int length) = NativeByteData;
}
@patch
class Float32List {
@patch
factory Float32List(int length) = NativeFloat32List;
@patch
factory Float32List.fromList(List<double> elements) =
NativeFloat32List.fromList;
}
@patch
class Float64List {
@patch
factory Float64List(int length) = NativeFloat64List;
@patch
factory Float64List.fromList(List<double> elements) =
NativeFloat64List.fromList;
}
@patch
class Int16List {
@patch
factory Int16List(int length) = NativeInt16List;
@patch
factory Int16List.fromList(List<int> elements) = NativeInt16List.fromList;
}
@patch
class Int32List {
@patch
factory Int32List(int length) = NativeInt32List;
@patch
factory Int32List.fromList(List<int> elements) = NativeInt32List.fromList;
}
@patch
class Int8List {
@patch
factory Int8List(int length) = NativeInt8List;
@patch
factory Int8List.fromList(List<int> elements) = NativeInt8List.fromList;
}
@patch
class Uint32List {
@patch
factory Uint32List(int length) = NativeUint32List;
@patch
factory Uint32List.fromList(List<int> elements) = NativeUint32List.fromList;
}
@patch
class Uint16List {
@patch
factory Uint16List(int length) = NativeUint16List;
@patch
factory Uint16List.fromList(List<int> elements) = NativeUint16List.fromList;
}
@patch
class Uint8ClampedList {
@patch
factory Uint8ClampedList(int length) = NativeUint8ClampedList;
@patch
factory Uint8ClampedList.fromList(List<int> elements) =
NativeUint8ClampedList.fromList;
}
@patch
class Uint8List {
@patch
factory Uint8List(int length) = NativeUint8List;
@patch
factory Uint8List.fromList(List<int> elements) = NativeUint8List.fromList;
}
@patch
class Int64List {
@patch
factory Int64List(int length) {
throw UnsupportedError("Int64List not supported on the web.");
}
@patch
factory Int64List.fromList(List<int> elements) {
throw UnsupportedError("Int64List not supported on the web.");
}
}
@patch
class Uint64List {
@patch
factory Uint64List(int length) {
throw UnsupportedError("Uint64List not supported on the web.");
}
@patch
factory Uint64List.fromList(List<int> elements) {
throw UnsupportedError("Uint64List not supported on the web.");
}
}
@patch
class Int32x4List {
@patch
factory Int32x4List(int length) = NativeInt32x4List;
@patch
factory Int32x4List.fromList(List<Int32x4> elements) =
NativeInt32x4List.fromList;
}
@patch
class Float32x4List {
@patch
factory Float32x4List(int length) = NativeFloat32x4List;
@patch
factory Float32x4List.fromList(List<Float32x4> elements) =
NativeFloat32x4List.fromList;
}
@patch
class Float64x2List {
@patch
factory Float64x2List(int length) = NativeFloat64x2List;
@patch
factory Float64x2List.fromList(List<Float64x2> elements) =
NativeFloat64x2List.fromList;
}
@patch
class Float32x4 {
@patch
factory Float32x4(double x, double y, double z, double w) = NativeFloat32x4;
@patch
factory Float32x4.splat(double v) = NativeFloat32x4.splat;
@patch
factory Float32x4.zero() = NativeFloat32x4.zero;
@patch
factory Float32x4.fromInt32x4Bits(Int32x4 x) =
NativeFloat32x4.fromInt32x4Bits;
@patch
factory Float32x4.fromFloat64x2(Float64x2 v) = NativeFloat32x4.fromFloat64x2;
}
@patch
class Int32x4 {
@patch
factory Int32x4(int x, int y, int z, int w) = NativeInt32x4;
@patch
factory Int32x4.bool(bool x, bool y, bool z, bool w) = NativeInt32x4.bool;
@patch
factory Int32x4.fromFloat32x4Bits(Float32x4 x) =
NativeInt32x4.fromFloat32x4Bits;
}
@patch
class Float64x2 {
@patch
factory Float64x2(double x, double y) = NativeFloat64x2;
@patch
factory Float64x2.splat(double v) = NativeFloat64x2.splat;
@patch
factory Float64x2.zero() = NativeFloat64x2.zero;
@patch
factory Float64x2.fromFloat32x4(Float32x4 v) = NativeFloat64x2.fromFloat32x4;
}
/// A read-only view of a [ByteBuffer].
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableByteBufferView.
class _UnmodifiableByteBufferView implements ByteBuffer {
final ByteBuffer _data;
_UnmodifiableByteBufferView(ByteBuffer data) : _data = data;
int get lengthInBytes => _data.lengthInBytes;
Uint8List asUint8List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableUint8ListView(_data.asUint8List(offsetInBytes, length));
Int8List asInt8List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableInt8ListView(_data.asInt8List(offsetInBytes, length));
Uint8ClampedList asUint8ClampedList([int offsetInBytes = 0, int? length]) =>
new UnmodifiableUint8ClampedListView(
_data.asUint8ClampedList(offsetInBytes, length));
Uint16List asUint16List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableUint16ListView(_data.asUint16List(offsetInBytes, length));
Int16List asInt16List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableInt16ListView(_data.asInt16List(offsetInBytes, length));
Uint32List asUint32List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableUint32ListView(_data.asUint32List(offsetInBytes, length));
Int32List asInt32List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableInt32ListView(_data.asInt32List(offsetInBytes, length));
Uint64List asUint64List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableUint64ListView(_data.asUint64List(offsetInBytes, length));
Int64List asInt64List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableInt64ListView(_data.asInt64List(offsetInBytes, length));
Int32x4List asInt32x4List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableInt32x4ListView(
_data.asInt32x4List(offsetInBytes, length));
Float32List asFloat32List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableFloat32ListView(
_data.asFloat32List(offsetInBytes, length));
Float64List asFloat64List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableFloat64ListView(
_data.asFloat64List(offsetInBytes, length));
Float32x4List asFloat32x4List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableFloat32x4ListView(
_data.asFloat32x4List(offsetInBytes, length));
Float64x2List asFloat64x2List([int offsetInBytes = 0, int? length]) =>
new UnmodifiableFloat64x2ListView(
_data.asFloat64x2List(offsetInBytes, length));
ByteData asByteData([int offsetInBytes = 0, int? length]) =>
new UnmodifiableByteDataView(_data.asByteData(offsetInBytes, length));
}
/// A read-only view of a [ByteData].
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableByteDataView.
class _UnmodifiableByteDataView implements ByteData {
final ByteData _data;
_UnmodifiableByteDataView(ByteData data) : _data = data;
int getInt8(int byteOffset) => _data.getInt8(byteOffset);
void setInt8(int byteOffset, int value) => _unsupported();
int getUint8(int byteOffset) => _data.getUint8(byteOffset);
void setUint8(int byteOffset, int value) => _unsupported();
int getInt16(int byteOffset, [Endian endian = Endian.big]) =>
_data.getInt16(byteOffset, endian);
void setInt16(int byteOffset, int value, [Endian endian = Endian.big]) =>
_unsupported();
int getUint16(int byteOffset, [Endian endian = Endian.big]) =>
_data.getUint16(byteOffset, endian);
void setUint16(int byteOffset, int value, [Endian endian = Endian.big]) =>
_unsupported();
int getInt32(int byteOffset, [Endian endian = Endian.big]) =>
_data.getInt32(byteOffset, endian);
void setInt32(int byteOffset, int value, [Endian endian = Endian.big]) =>
_unsupported();
int getUint32(int byteOffset, [Endian endian = Endian.big]) =>
_data.getUint32(byteOffset, endian);
void setUint32(int byteOffset, int value, [Endian endian = Endian.big]) =>
_unsupported();
int getInt64(int byteOffset, [Endian endian = Endian.big]) =>
_data.getInt64(byteOffset, endian);
void setInt64(int byteOffset, int value, [Endian endian = Endian.big]) =>
_unsupported();
int getUint64(int byteOffset, [Endian endian = Endian.big]) =>
_data.getUint64(byteOffset, endian);
void setUint64(int byteOffset, int value, [Endian endian = Endian.big]) =>
_unsupported();
double getFloat32(int byteOffset, [Endian endian = Endian.big]) =>
_data.getFloat32(byteOffset, endian);
void setFloat32(int byteOffset, double value, [Endian endian = Endian.big]) =>
_unsupported();
double getFloat64(int byteOffset, [Endian endian = Endian.big]) =>
_data.getFloat64(byteOffset, endian);
void setFloat64(int byteOffset, double value, [Endian endian = Endian.big]) =>
_unsupported();
int get elementSizeInBytes => _data.elementSizeInBytes;
int get offsetInBytes => _data.offsetInBytes;
int get lengthInBytes => _data.lengthInBytes;
ByteBuffer get buffer => new UnmodifiableByteBufferView(_data.buffer);
void _unsupported() {
throw new UnsupportedError(
"An UnmodifiableByteDataView may not be modified");
}
}
abstract class _UnmodifiableListMixin<N, L extends List<N>,
TD extends TypedData> {
L get _list;
TD get _data => (_list as TD);
int get length => _list.length;
N operator [](int index) => _list[index];
int get elementSizeInBytes => _data.elementSizeInBytes;
int get offsetInBytes => _data.offsetInBytes;
int get lengthInBytes => _data.lengthInBytes;
ByteBuffer get buffer => new UnmodifiableByteBufferView(_data.buffer);
L _createList(int length);
L sublist(int start, [int? end]) {
// NNBD: Spurious error at `end`, `checkValidRange` is legacy.
int endIndex = RangeError.checkValidRange(start, end!, length);
int sublistLength = endIndex - start;
L result = _createList(sublistLength);
result.setRange(0, sublistLength, _list, start);
return result;
}
}
/// View of a [Uint8List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableUint8ListView.
class _UnmodifiableUint8ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Uint8List, Uint8List>
implements UnmodifiableUint8ListView {
final Uint8List _list;
_UnmodifiableUint8ListView(Uint8List list) : _list = list;
Uint8List _createList(int length) => Uint8List(length);
}
/// View of a [Int8List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableInt8ListView.
class _UnmodifiableInt8ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Int8List, Int8List>
implements UnmodifiableInt8ListView {
final Int8List _list;
_UnmodifiableInt8ListView(Int8List list) : _list = list;
Int8List _createList(int length) => Int8List(length);
}
/// View of a [Uint8ClampedList] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableUint8ClampedListView.
class _UnmodifiableUint8ClampedListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Uint8ClampedList, Uint8ClampedList>
implements UnmodifiableUint8ClampedListView {
final Uint8ClampedList _list;
_UnmodifiableUint8ClampedListView(Uint8ClampedList list) : _list = list;
Uint8ClampedList _createList(int length) => Uint8ClampedList(length);
}
/// View of a [Uint16List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableUint16ListView.
class _UnmodifiableUint16ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Uint16List, Uint16List>
implements UnmodifiableUint16ListView {
final Uint16List _list;
_UnmodifiableUint16ListView(Uint16List list) : _list = list;
Uint16List _createList(int length) => Uint16List(length);
}
/// View of a [Int16List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableInt16ListView.
class _UnmodifiableInt16ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Int16List, Int16List>
implements UnmodifiableInt16ListView {
final Int16List _list;
_UnmodifiableInt16ListView(Int16List list) : _list = list;
Int16List _createList(int length) => Int16List(length);
}
/// View of a [Uint32List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableUint32ListView.
class _UnmodifiableUint32ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Uint32List, Uint32List>
implements UnmodifiableUint32ListView {
final Uint32List _list;
_UnmodifiableUint32ListView(Uint32List list) : _list = list;
Uint32List _createList(int length) => Uint32List(length);
}
/// View of a [Int32List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableInt32ListView.
class _UnmodifiableInt32ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Int32List, Int32List>
implements UnmodifiableInt32ListView {
final Int32List _list;
_UnmodifiableInt32ListView(Int32List list) : _list = list;
Int32List _createList(int length) => Int32List(length);
}
/// View of a [Uint64List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableUint64ListView.
class _UnmodifiableUint64ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Uint64List, Uint64List>
implements UnmodifiableUint64ListView {
final Uint64List _list;
_UnmodifiableUint64ListView(Uint64List list) : _list = list;
Uint64List _createList(int length) => Uint64List(length);
}
/// View of a [Int64List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableInt64ListView.
class _UnmodifiableInt64ListView extends UnmodifiableListBase<int>
with _UnmodifiableListMixin<int, Int64List, Int64List>
implements UnmodifiableInt64ListView {
final Int64List _list;
_UnmodifiableInt64ListView(Int64List list) : _list = list;
Int64List _createList(int length) => Int64List(length);
}
/// View of a [Int32x4List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableInt32x4ListView.
class _UnmodifiableInt32x4ListView extends UnmodifiableListBase<Int32x4>
with _UnmodifiableListMixin<Int32x4, Int32x4List, Int32x4List>
implements UnmodifiableInt32x4ListView {
final Int32x4List _list;
_UnmodifiableInt32x4ListView(Int32x4List list) : _list = list;
Int32x4List _createList(int length) => Int32x4List(length);
}
/// View of a [Float32x4List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableFloat32x4ListView.
class _UnmodifiableFloat32x4ListView extends UnmodifiableListBase<Float32x4>
with _UnmodifiableListMixin<Float32x4, Float32x4List, Float32x4List>
implements UnmodifiableFloat32x4ListView {
final Float32x4List _list;
_UnmodifiableFloat32x4ListView(Float32x4List list) : _list = list;
Float32x4List _createList(int length) => Float32x4List(length);
}
/// View of a [Float64x2List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableFloat64x2ListView.
class _UnmodifiableFloat64x2ListView extends UnmodifiableListBase<Float64x2>
with _UnmodifiableListMixin<Float64x2, Float64x2List, Float64x2List>
implements UnmodifiableFloat64x2ListView {
final Float64x2List _list;
_UnmodifiableFloat64x2ListView(Float64x2List list) : _list = list;
Float64x2List _createList(int length) => Float64x2List(length);
}
/// View of a [Float32List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableFloat32ListView.
class _UnmodifiableFloat32ListView extends UnmodifiableListBase<double>
with _UnmodifiableListMixin<double, Float32List, Float32List>
implements UnmodifiableFloat32ListView {
final Float32List _list;
_UnmodifiableFloat32ListView(Float32List list) : _list = list;
Float32List _createList(int length) => Float32List(length);
}
/// View of a [Float64List] that disallows modification.
///
/// It is a compile-time error for a class to attempt to extend or implement
/// UnmodifiableFloat64ListView.
class _UnmodifiableFloat64ListView extends UnmodifiableListBase<double>
with _UnmodifiableListMixin<double, Float64List, Float64List>
implements UnmodifiableFloat64ListView {
final Float64List _list;
_UnmodifiableFloat64ListView(Float64List list) : _list = list;
Float64List _createList(int length) => Float64List(length);
}
@patch
abstract class UnmodifiableByteBufferView implements Uint8List {
factory UnmodifiableByteBufferView(ByteBuffer data) =
_UnmodifiableByteBufferView;
}
@patch
abstract class UnmodifiableByteDataView implements Uint8List {
factory UnmodifiableByteDataView(ByteData data) = _UnmodifiableByteDataView;
}
@patch
abstract class UnmodifiableUint8ListView implements Uint8List {
factory UnmodifiableUint8ListView(Uint8List list) =
_UnmodifiableUint8ListView;
}
@patch
abstract class UnmodifiableInt8ListView implements Int8List {
factory UnmodifiableInt8ListView(Int8List list) = _UnmodifiableInt8ListView;
}
@patch
abstract class UnmodifiableUint8ClampedListView implements Uint8ClampedList {
factory UnmodifiableUint8ClampedListView(Uint8ClampedList list) =
_UnmodifiableUint8ClampedListView;
}
@patch
abstract class UnmodifiableUint16ListView implements Uint16List {
factory UnmodifiableUint16ListView(Uint16List list) =
_UnmodifiableUint16ListView;
}
@patch
abstract class UnmodifiableInt16ListView implements Int16List {
factory UnmodifiableInt16ListView(Int16List list) =
_UnmodifiableInt16ListView;
}
@patch
abstract class UnmodifiableUint32ListView implements Uint32List {
factory UnmodifiableUint32ListView(Uint32List list) =
_UnmodifiableUint32ListView;
}
@patch
abstract class UnmodifiableInt32ListView implements Int32List {
factory UnmodifiableInt32ListView(Int32List list) =
_UnmodifiableInt32ListView;
}
@patch
abstract class UnmodifiableUint64ListView implements Uint64List {
factory UnmodifiableUint64ListView(Uint64List list) =
_UnmodifiableUint64ListView;
}
@patch
abstract class UnmodifiableInt64ListView implements Int64List {
factory UnmodifiableInt64ListView(Int64List list) =
_UnmodifiableInt64ListView;
}
@patch
abstract class UnmodifiableInt32x4ListView implements Int32x4List {
factory UnmodifiableInt32x4ListView(Int32x4List list) =
_UnmodifiableInt32x4ListView;
}
@patch
abstract class UnmodifiableFloat32x4ListView implements Float32x4List {
factory UnmodifiableFloat32x4ListView(Float32x4List list) =
_UnmodifiableFloat32x4ListView;
}
@patch
abstract class UnmodifiableFloat64x2ListView implements Float64x2List {
factory UnmodifiableFloat64x2ListView(Float64x2List list) =
_UnmodifiableFloat64x2ListView;
}
@patch
abstract class UnmodifiableFloat32ListView implements Float32List {
factory UnmodifiableFloat32ListView(Float32List list) =
_UnmodifiableFloat32ListView;
}
@patch
abstract class UnmodifiableFloat64ListView implements Float64List {
factory UnmodifiableFloat64ListView(Float64List list) =
_UnmodifiableFloat64ListView;
}