mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 22:11:19 +00:00
Use offsetInBytes and not index in the get/set accessors of views.
Review URL: https://codereview.chromium.org//12608006 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20003 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
parent
924e321c35
commit
5b0ee63836
|
@ -109,18 +109,16 @@ CLASS_LIST_TYPED_DATA(TYPED_DATA_NEW_NATIVE)
|
|||
#define TYPED_DATA_GETTER(getter, object) \
|
||||
DEFINE_NATIVE_ENTRY(TypedData_##getter, 2) { \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, arguments->NativeArgAt(1)); \
|
||||
if (instance.IsTypedData()) { \
|
||||
const TypedData& array = TypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
return object::New(array.getter(offsetInBytes)); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
return object::New(array.getter(offsetInBytes.Value())); \
|
||||
} \
|
||||
if (instance.IsExternalTypedData()) { \
|
||||
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
return object::New(array.getter(offsetInBytes)); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
return object::New(array.getter(offsetInBytes.Value())); \
|
||||
} \
|
||||
const String& error = String::Handle(String::NewFormatted( \
|
||||
"Expected a TypedData object but found %s", instance.ToCString())); \
|
||||
|
@ -134,18 +132,16 @@ DEFINE_NATIVE_ENTRY(TypedData_##getter, 2) { \
|
|||
#define TYPED_DATA_SETTER(setter, object, get_object_value) \
|
||||
DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) { \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, arguments->NativeArgAt(1)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(object, value, arguments->NativeArgAt(2)); \
|
||||
if (instance.IsTypedData()) { \
|
||||
const TypedData& array = TypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes, value.get_object_value()); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes.Value(), value.get_object_value()); \
|
||||
} else if (instance.IsExternalTypedData()) { \
|
||||
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes, value.get_object_value()); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes.Value(), value.get_object_value()); \
|
||||
} else { \
|
||||
const String& error = String::Handle(String::NewFormatted( \
|
||||
"Expected a TypedData object but found %s", instance.ToCString())); \
|
||||
|
@ -160,18 +156,16 @@ DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) { \
|
|||
#define TYPED_DATA_UINT64_GETTER(getter, object) \
|
||||
DEFINE_NATIVE_ENTRY(TypedData_##getter, 2) { \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, arguments->NativeArgAt(1)); \
|
||||
uint64_t value = 0; \
|
||||
if (instance.IsTypedData()) { \
|
||||
const TypedData& array = TypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
value = array.getter(offsetInBytes); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
value = array.getter(offsetInBytes.Value()); \
|
||||
} else if (instance.IsExternalTypedData()) { \
|
||||
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
value = array.getter(offsetInBytes); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
value = array.getter(offsetInBytes.Value()); \
|
||||
} else { \
|
||||
const String& error = String::Handle(String::NewFormatted( \
|
||||
"Expected a TypedData object but found %s", instance.ToCString())); \
|
||||
|
@ -196,7 +190,7 @@ DEFINE_NATIVE_ENTRY(TypedData_##getter, 2) { \
|
|||
#define TYPED_DATA_UINT64_SETTER(setter, object) \
|
||||
DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) { \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, index, arguments->NativeArgAt(1)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, arguments->NativeArgAt(1)); \
|
||||
GET_NON_NULL_NATIVE_ARGUMENT(object, value, arguments->NativeArgAt(2)); \
|
||||
uint64_t object_value; \
|
||||
if (value.IsBigint()) { \
|
||||
|
@ -209,14 +203,12 @@ DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) { \
|
|||
} \
|
||||
if (instance.IsTypedData()) { \
|
||||
const TypedData& array = TypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes, object_value); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes.Value(), object_value); \
|
||||
} else if (instance.IsExternalTypedData()) { \
|
||||
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
|
||||
intptr_t offsetInBytes = index.Value() * array.ElementSizeInBytes(); \
|
||||
ASSERT(RangeCheck(offsetInBytes, array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes, object_value); \
|
||||
ASSERT(RangeCheck(offsetInBytes.Value(), array.LengthInBytes())); \
|
||||
array.setter(offsetInBytes.Value(), object_value); \
|
||||
} else { \
|
||||
const String& error = String::Handle(String::NewFormatted( \
|
||||
"Expected a TypedData object but found %s", instance.ToCString())); \
|
||||
|
|
|
@ -475,35 +475,37 @@ abstract class _TypedList extends _TypedListBase implements ByteBuffer {
|
|||
|
||||
// Internal utility methods.
|
||||
|
||||
int _getInt8(int index) native "TypedData_GetInt8";
|
||||
void _setInt8(int index, int value) native "TypedData_SetInt8";
|
||||
int _getInt8(int offsetInBytes) native "TypedData_GetInt8";
|
||||
void _setInt8(int offsetInBytes, int value) native "TypedData_SetInt8";
|
||||
|
||||
int _getUint8(int index) native "TypedData_GetUint8";
|
||||
void _setUint8(int index, int value) native "TypedData_SetUint8";
|
||||
int _getUint8(int offsetInBytes) native "TypedData_GetUint8";
|
||||
void _setUint8(int offsetInBytes, int value) native "TypedData_SetUint8";
|
||||
|
||||
int _getInt16(int index) native "TypedData_GetInt16";
|
||||
void _setInt16(int index, int value) native "TypedData_SetInt16";
|
||||
int _getInt16(int offsetInBytes) native "TypedData_GetInt16";
|
||||
void _setInt16(int offsetInBytes, int value) native "TypedData_SetInt16";
|
||||
|
||||
int _getUint16(int index) native "TypedData_GetUint16";
|
||||
void _setUint16(int index, int value) native "TypedData_SetUint16";
|
||||
int _getUint16(int offsetInBytes) native "TypedData_GetUint16";
|
||||
void _setUint16(int offsetInBytes, int value) native "TypedData_SetUint16";
|
||||
|
||||
int _getInt32(int index) native "TypedData_GetInt32";
|
||||
void _setInt32(int index, int value) native "TypedData_SetInt32";
|
||||
int _getInt32(int offsetInBytes) native "TypedData_GetInt32";
|
||||
void _setInt32(int offsetInBytes, int value) native "TypedData_SetInt32";
|
||||
|
||||
int _getUint32(int index) native "TypedData_GetUint32";
|
||||
void _setUint32(int index, int value) native "TypedData_SetUint32";
|
||||
int _getUint32(int offsetInBytes) native "TypedData_GetUint32";
|
||||
void _setUint32(int offsetInBytes, int value) native "TypedData_SetUint32";
|
||||
|
||||
int _getInt64(int index) native "TypedData_GetInt64";
|
||||
void _setInt64(int index, int value) native "TypedData_SetInt64";
|
||||
int _getInt64(int offsetInBytes) native "TypedData_GetInt64";
|
||||
void _setInt64(int offsetInBytes, int value) native "TypedData_SetInt64";
|
||||
|
||||
int _getUint64(int index) native "TypedData_GetUint64";
|
||||
void _setUint64(int index, int value) native "TypedData_SetUint64";
|
||||
int _getUint64(int offsetInBytes) native "TypedData_GetUint64";
|
||||
void _setUint64(int offsetInBytes, int value) native "TypedData_SetUint64";
|
||||
|
||||
double _getFloat32(int index) native "TypedData_GetFloat32";
|
||||
void _setFloat32(int index, double value) native "TypedData_SetFloat32";
|
||||
double _getFloat32(int offsetInBytes) native "TypedData_GetFloat32";
|
||||
void _setFloat32(int offsetInBytes, double value)
|
||||
native "TypedData_SetFloat32";
|
||||
|
||||
double _getFloat64(int index) native "TypedData_GetFloat64";
|
||||
void _setFloat64(int index, double value) native "TypedData_SetFloat64";
|
||||
double _getFloat64(int offsetInBytes) native "TypedData_GetFloat64";
|
||||
void _setFloat64(int offsetInBytes, double value)
|
||||
native "TypedData_SetFloat64";
|
||||
}
|
||||
|
||||
|
||||
|
@ -713,7 +715,7 @@ class _Int16Array extends _TypedList implements Int16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getInt16(index);
|
||||
return _getIndexedInt16(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -721,7 +723,7 @@ class _Int16Array extends _TypedList implements Int16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setInt16(index, _toInt16(value));
|
||||
_setIndexedInt16(index, _toInt16(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -742,6 +744,14 @@ class _Int16Array extends _TypedList implements Int16List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
int _getIndexedInt16(int index) {
|
||||
return _getInt16(index * Int16List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedInt16(int index, int value) {
|
||||
_setInt16(index * Int16List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Int16Array _new(int length) native "TypedData_Int16Array_new";
|
||||
}
|
||||
|
||||
|
@ -774,7 +784,7 @@ class _Uint16Array extends _TypedList implements Uint16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getUint16(index);
|
||||
return _getIndexedUint16(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -782,7 +792,7 @@ class _Uint16Array extends _TypedList implements Uint16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setUint16(index, _toUint16(value));
|
||||
_setIndexedUint16(index, _toUint16(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -803,6 +813,14 @@ class _Uint16Array extends _TypedList implements Uint16List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
int _getIndexedUint16(int index) {
|
||||
return _getUint16(index * Uint16List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedUint16(int index, int value) {
|
||||
_setUint16(index * Uint16List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Uint16Array _new(int length) native "TypedData_Uint16Array_new";
|
||||
}
|
||||
|
||||
|
@ -835,7 +853,7 @@ class _Int32Array extends _TypedList implements Int32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getInt32(index);
|
||||
return _getIndexedInt32(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -843,7 +861,7 @@ class _Int32Array extends _TypedList implements Int32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setInt32(index, _toInt32(value));
|
||||
_setIndexedInt32(index, _toInt32(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -864,6 +882,14 @@ class _Int32Array extends _TypedList implements Int32List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
int _getIndexedInt32(int index) {
|
||||
return _getInt32(index * Int32List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedInt32(int index, int value) {
|
||||
_setInt32(index * Int32List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Int32Array _new(int length) native "TypedData_Int32Array_new";
|
||||
}
|
||||
|
||||
|
@ -896,7 +922,7 @@ class _Uint32Array extends _TypedList implements Uint32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getUint32(index);
|
||||
return _getIndexedUint32(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -904,7 +930,7 @@ class _Uint32Array extends _TypedList implements Uint32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setUint32(index, _toUint32(value));
|
||||
_setIndexedUint32(index, _toUint32(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -925,6 +951,14 @@ class _Uint32Array extends _TypedList implements Uint32List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
int _getIndexedUint32(int index) {
|
||||
return _getUint32(index * Uint32List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedUint32(int index, int value) {
|
||||
_setInt32(index * Uint32List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Uint32Array _new(int length) native "TypedData_Uint32Array_new";
|
||||
}
|
||||
|
||||
|
@ -957,7 +991,7 @@ class _Int64Array extends _TypedList implements Int64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getInt64(index);
|
||||
return _getIndexedInt64(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -965,7 +999,7 @@ class _Int64Array extends _TypedList implements Int64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setInt64(index, _toInt64(value));
|
||||
_setIndexedInt64(index, _toInt64(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -986,6 +1020,14 @@ class _Int64Array extends _TypedList implements Int64List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
int _getIndexedInt64(int index) {
|
||||
return _getInt64(index * Int64List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedInt64(int index, int value) {
|
||||
_setInt64(index * Int64List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Int64Array _new(int length) native "TypedData_Int64Array_new";
|
||||
}
|
||||
|
||||
|
@ -1018,7 +1060,7 @@ class _Uint64Array extends _TypedList implements Uint64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getUint64(index);
|
||||
return _getIndexedUint64(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1026,7 +1068,7 @@ class _Uint64Array extends _TypedList implements Uint64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setUint64(index, _toUint64(value));
|
||||
_setIndexedUint64(index, _toUint64(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1047,6 +1089,14 @@ class _Uint64Array extends _TypedList implements Uint64List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
int _getIndexedUint64(int index) {
|
||||
return _getUint64(index * Uint64List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedUint64(int index, int value) {
|
||||
_setUint64(index * Uint64List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Uint64Array _new(int length) native "TypedData_Uint64Array_new";
|
||||
}
|
||||
|
||||
|
@ -1079,7 +1129,7 @@ class _Float32Array extends _TypedList implements Float32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getFloat32(index);
|
||||
return _getIndexedFloat32(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, double value) {
|
||||
|
@ -1087,7 +1137,7 @@ class _Float32Array extends _TypedList implements Float32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setFloat32(index, value);
|
||||
_setIndexedFloat32(index, value);
|
||||
}
|
||||
|
||||
Iterator<double> get iterator {
|
||||
|
@ -1108,6 +1158,14 @@ class _Float32Array extends _TypedList implements Float32List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
double _getIndexedFloat32(int index) {
|
||||
return _getFloat32(index * Float32List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedFloat32(int index, double value) {
|
||||
_setFloat32(index * Float32List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Float32Array _new(int length) native "TypedData_Float32Array_new";
|
||||
}
|
||||
|
||||
|
@ -1140,7 +1198,7 @@ class _Float64Array extends _TypedList implements Float64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getFloat64(index);
|
||||
return _getIndexedFloat64(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, double value) {
|
||||
|
@ -1148,7 +1206,7 @@ class _Float64Array extends _TypedList implements Float64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setFloat64(index, value);
|
||||
_setIndexedFloat64(index, value);
|
||||
}
|
||||
|
||||
Iterator<double> get iterator {
|
||||
|
@ -1169,6 +1227,14 @@ class _Float64Array extends _TypedList implements Float64List {
|
|||
return _new(length);
|
||||
}
|
||||
|
||||
double _getIndexedFloat64(int index) {
|
||||
return _getFloat64(index * Float64List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedFloat64(int index, double value) {
|
||||
_setFloat64(index * Float64List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _Float64Array _new(int length) native "TypedData_Float64Array_new";
|
||||
}
|
||||
|
||||
|
@ -1350,7 +1416,7 @@ class _ExternalInt16Array extends _TypedList implements Int16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getInt16(index);
|
||||
return _getIndexedInt16(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1358,7 +1424,7 @@ class _ExternalInt16Array extends _TypedList implements Int16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setInt16(index, _toInt16(value));
|
||||
_setIndexedInt16(index, _toInt16(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1379,6 +1445,14 @@ class _ExternalInt16Array extends _TypedList implements Int16List {
|
|||
return new Int16List(length);
|
||||
}
|
||||
|
||||
int _getIndexedInt16(int index) {
|
||||
return _getInt16(index * Int16List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedInt16(int index, int value) {
|
||||
_setInt16(index * Int16List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalInt16Array _new(int length) native
|
||||
"ExternalTypedData_Int16Array_new";
|
||||
}
|
||||
|
@ -1403,7 +1477,7 @@ class _ExternalUint16Array extends _TypedList implements Uint16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getUint16(index);
|
||||
return _getIndexedUint16(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1411,7 +1485,7 @@ class _ExternalUint16Array extends _TypedList implements Uint16List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setUint16(index, _toUint16(value));
|
||||
_setIndexedUint16(index, _toUint16(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1432,6 +1506,14 @@ class _ExternalUint16Array extends _TypedList implements Uint16List {
|
|||
return new Uint16List(length);
|
||||
}
|
||||
|
||||
int _getIndexedUint16(int index) {
|
||||
return _getUint16(index * Uint16List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedUint16(int index, int value) {
|
||||
_setUint16(index * Uint16List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalUint16Array _new(int length) native
|
||||
"ExternalTypedData_Uint16Array_new";
|
||||
}
|
||||
|
@ -1456,7 +1538,7 @@ class _ExternalInt32Array extends _TypedList implements Int32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getInt32(index);
|
||||
return _getIndexedInt32(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1464,7 +1546,7 @@ class _ExternalInt32Array extends _TypedList implements Int32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setInt32(index, _toInt32(value));
|
||||
_setIndexedInt32(index, _toInt32(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1485,6 +1567,14 @@ class _ExternalInt32Array extends _TypedList implements Int32List {
|
|||
return new Int32List(length);
|
||||
}
|
||||
|
||||
int _getIndexedInt32(int index) {
|
||||
return _getInt32(index * Int32List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedInt32(int index, int value) {
|
||||
_setInt32(index * Int32List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalInt32Array _new(int length) native
|
||||
"ExternalTypedData_Int32Array_new";
|
||||
}
|
||||
|
@ -1509,7 +1599,7 @@ class _ExternalUint32Array extends _TypedList implements Uint32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getUint32(index);
|
||||
return _getIndexedUint32(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1517,7 +1607,7 @@ class _ExternalUint32Array extends _TypedList implements Uint32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setUint32(index, _toUint32(value));
|
||||
_setIndexedUint32(index, _toUint32(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1538,6 +1628,14 @@ class _ExternalUint32Array extends _TypedList implements Uint32List {
|
|||
return new Uint32List(length);
|
||||
}
|
||||
|
||||
int _getIndexedUint32(int index) {
|
||||
return _getUint32(index * Uint32List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedUint32(int index, int value) {
|
||||
_setInt32(index * Uint32List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalUint32Array _new(int length) native
|
||||
"ExternalTypedData_Uint32Array_new";
|
||||
}
|
||||
|
@ -1562,7 +1660,7 @@ class _ExternalInt64Array extends _TypedList implements Int64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getInt64(index);
|
||||
return _getIndexedInt64(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1570,7 +1668,7 @@ class _ExternalInt64Array extends _TypedList implements Int64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setInt64(index, _toInt64(value));
|
||||
_setIndexedInt64(index, _toInt64(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1591,6 +1689,14 @@ class _ExternalInt64Array extends _TypedList implements Int64List {
|
|||
return new Int64List(length);
|
||||
}
|
||||
|
||||
int _getIndexedInt64(int index) {
|
||||
return _getInt64(index * Int64List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedInt64(int index, int value) {
|
||||
_setInt64(index * Int64List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalInt64Array _new(int length) native
|
||||
"ExternalTypedData_Int64Array_new";
|
||||
}
|
||||
|
@ -1615,7 +1721,7 @@ class _ExternalUint64Array extends _TypedList implements Uint64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getUint64(index);
|
||||
return _getIndexedUint64(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, int value) {
|
||||
|
@ -1623,7 +1729,7 @@ class _ExternalUint64Array extends _TypedList implements Uint64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setUint64(index, _toUint64(value));
|
||||
_setIndexedUint64(index, _toUint64(value));
|
||||
}
|
||||
|
||||
Iterator<int> get iterator {
|
||||
|
@ -1633,10 +1739,6 @@ class _ExternalUint64Array extends _TypedList implements Uint64List {
|
|||
|
||||
// Method(s) implementing the TypedData interface.
|
||||
|
||||
Uint64List _createList(int length) {
|
||||
return new Uint64List(length);
|
||||
}
|
||||
|
||||
int get elementSizeInBytes {
|
||||
return Uint64List.BYTES_PER_ELEMENT;
|
||||
}
|
||||
|
@ -1644,6 +1746,18 @@ class _ExternalUint64Array extends _TypedList implements Uint64List {
|
|||
|
||||
// Internal utility methods.
|
||||
|
||||
Uint64List _createList(int length) {
|
||||
return new Uint64List(length);
|
||||
}
|
||||
|
||||
int _getIndexedUint64(int index) {
|
||||
return _getUint64(index * Uint64List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedUint64(int index, int value) {
|
||||
_setUint64(index * Uint64List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalUint64Array _new(int length) native
|
||||
"ExternalTypedData_Uint64Array_new";
|
||||
}
|
||||
|
@ -1668,7 +1782,7 @@ class _ExternalFloat32Array extends _TypedList implements Float32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getFloat32(index);
|
||||
return _getIndexedFloat32(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, double value) {
|
||||
|
@ -1676,7 +1790,7 @@ class _ExternalFloat32Array extends _TypedList implements Float32List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setFloat32(index, value);
|
||||
_setIndexedFloat32(index, value);
|
||||
}
|
||||
|
||||
Iterator<double> get iterator {
|
||||
|
@ -1697,6 +1811,14 @@ class _ExternalFloat32Array extends _TypedList implements Float32List {
|
|||
return new Float32List(length);
|
||||
}
|
||||
|
||||
double _getIndexedFloat32(int index) {
|
||||
return _getFloat32(index * Float32List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedFloat32(int index, double value) {
|
||||
_setFloat32(index * Float32List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalFloat32Array _new(int length) native
|
||||
"ExternalTypedData_Float32Array_new";
|
||||
}
|
||||
|
@ -1721,7 +1843,7 @@ class _ExternalFloat64Array extends _TypedList implements Float64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
return _getFloat64(index);
|
||||
return _getIndexedFloat64(index);
|
||||
}
|
||||
|
||||
void operator[]=(int index, double value) {
|
||||
|
@ -1729,7 +1851,7 @@ class _ExternalFloat64Array extends _TypedList implements Float64List {
|
|||
String message = "$index must be in the range [0..$length)";
|
||||
throw new RangeError(message);
|
||||
}
|
||||
_setFloat64(index, value);
|
||||
_setIndexedFloat64(index, value);
|
||||
}
|
||||
|
||||
Iterator<double> get iterator {
|
||||
|
@ -1750,6 +1872,14 @@ class _ExternalFloat64Array extends _TypedList implements Float64List {
|
|||
return new Float64List(length);
|
||||
}
|
||||
|
||||
double _getIndexedFloat64(int index) {
|
||||
return _getFloat64(index * Float64List.BYTES_PER_ELEMENT);
|
||||
}
|
||||
|
||||
void _setIndexedFloat64(int index, double value) {
|
||||
_setFloat64(index * Float64List.BYTES_PER_ELEMENT, value);
|
||||
}
|
||||
|
||||
static _ExternalFloat64Array _new(int length) native
|
||||
"ExternalTypedData_Float64Array_new";
|
||||
}
|
||||
|
|
|
@ -217,68 +217,66 @@ void testIndexOf() {
|
|||
testIndexOfHelper(new Uint8ClampedList.transferable(10));
|
||||
}
|
||||
|
||||
void testGetAtIndex() {
|
||||
var list = new Uint8List(8);
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
list[i] = 42;
|
||||
}
|
||||
void testGetAtIndex(TypedData list, num initial_value) {
|
||||
var bdata = new ByteData.view(list);
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes; i++) {
|
||||
Expect.equals(42, bdata.getUint8(i));
|
||||
Expect.equals(42, bdata.getInt8(i));
|
||||
}
|
||||
for (int i = 0; i < list.length ~/ 2; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-1; i+=2) {
|
||||
Expect.equals(10794, bdata.getUint16(i));
|
||||
Expect.equals(10794, bdata.getInt16(i));
|
||||
}
|
||||
for (int i = 0; i < list.length ~/ 4; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-3; i+=4) {
|
||||
Expect.equals(707406378, bdata.getUint32(i));
|
||||
Expect.equals(707406378, bdata.getInt32(i));
|
||||
Expect.equals(1.511366173271439e-13, bdata.getFloat32(i));
|
||||
}
|
||||
for (int i = 0; i < list.length ~/ 8; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-7; i+=8) {
|
||||
Expect.equals(3038287259199220266, bdata.getUint64(i));
|
||||
Expect.equals(3038287259199220266, bdata.getInt64(i));
|
||||
Expect.equals(1.4260258159703532e-105, bdata.getFloat64(i));
|
||||
}
|
||||
}
|
||||
|
||||
void testSetAtIndex() {
|
||||
var list = new Uint8List(8);
|
||||
void validate() {
|
||||
void testSetAtIndex(TypedData list,
|
||||
num initial_value, [bool use_double = false]) {
|
||||
void validate([reinit = true]) {
|
||||
for (int i = 0; i < list.length; i++) {
|
||||
Expect.equals(42, list[i]);
|
||||
Expect.equals(initial_value, list[i]);
|
||||
if (reinit) list[i] = use_double? 0.0 : 0;
|
||||
}
|
||||
}
|
||||
var bdata = new ByteData.view(list);
|
||||
for (int i = 0; i < list.length; i++) bdata.setUint8(i, 42);
|
||||
for (int i = 0; i < bdata.lengthInBytes; i++) bdata.setUint8(i, 42);
|
||||
validate();
|
||||
for (int i = 0; i < list.length; i++) bdata.setInt8(i, 42);
|
||||
for (int i = 0; i < bdata.lengthInBytes; i++) bdata.setInt8(i, 42);
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 2; i++) bdata.setUint16(i, 10794);
|
||||
for (int i = 0; i < bdata.lengthInBytes-1; i+=2) bdata.setUint16(i, 10794);
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 2; i++) bdata.setInt16(i, 10794);
|
||||
for (int i = 0; i < bdata.lengthInBytes-1; i+=2) bdata.setInt16(i, 10794);
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 4; i++) bdata.setUint32(i, 707406378);
|
||||
for (int i = 0; i < bdata.lengthInBytes-3; i+=4)
|
||||
bdata.setUint32(i, 707406378);
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 4; i++) bdata.setInt32(i, 707406378);
|
||||
for (int i = 0; i < bdata.lengthInBytes-3; i+=4) bdata.setInt32(i, 707406378);
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 4; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-3; i+=4) {
|
||||
bdata.setFloat32(i, 1.511366173271439e-13);
|
||||
}
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 8; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-7; i+=8) {
|
||||
bdata.setUint64(i, 3038287259199220266);
|
||||
}
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 8; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-7; i+=8) {
|
||||
bdata.setInt64(i, 3038287259199220266);
|
||||
}
|
||||
validate();
|
||||
for (int i = 0; i < list.length ~/ 8; i++) {
|
||||
for (int i = 0; i < bdata.lengthInBytes-7; i+=8) {
|
||||
bdata.setFloat64(i, 1.4260258159703532e-105);
|
||||
}
|
||||
validate();
|
||||
validate(false);
|
||||
}
|
||||
|
||||
main() {
|
||||
|
@ -293,8 +291,46 @@ main() {
|
|||
testSetRange();
|
||||
testIndexOutOfRange();
|
||||
testIndexOf();
|
||||
testGetAtIndex();
|
||||
testSetAtIndex();
|
||||
|
||||
var int8list = new Int8List(128);
|
||||
testSetAtIndex(int8list, 42);
|
||||
testGetAtIndex(int8list, 42);
|
||||
|
||||
var uint8list = new Uint8List(128);
|
||||
testSetAtIndex(uint8list, 42);
|
||||
testGetAtIndex(uint8list, 42);
|
||||
|
||||
var int16list = new Int16List(64);
|
||||
testSetAtIndex(int16list, 10794);
|
||||
testGetAtIndex(int16list, 10794);
|
||||
|
||||
var uint16list = new Uint16List(64);
|
||||
testSetAtIndex(uint16list, 10794);
|
||||
testGetAtIndex(uint16list, 10794);
|
||||
|
||||
var int32list = new Int32List(32);
|
||||
testSetAtIndex(int32list, 707406378);
|
||||
testGetAtIndex(int32list, 707406378);
|
||||
|
||||
var uint32list = new Uint32List(32);
|
||||
testSetAtIndex(uint32list, 707406378);
|
||||
testGetAtIndex(uint32list, 707406378);
|
||||
|
||||
var int64list = new Int64List(16);
|
||||
testSetAtIndex(int64list, 3038287259199220266);
|
||||
testGetAtIndex(int64list, 3038287259199220266);
|
||||
|
||||
var uint64list = new Uint64List(16);
|
||||
testSetAtIndex(uint64list, 3038287259199220266);
|
||||
testGetAtIndex(uint64list, 3038287259199220266);
|
||||
|
||||
var float32list = new Float32List(32);
|
||||
testSetAtIndex(float32list, 1.511366173271439e-13, true);
|
||||
testGetAtIndex(float32list, 1.511366173271439e-13);
|
||||
|
||||
var float64list = new Float64List(16);
|
||||
testSetAtIndex(float64list, 1.4260258159703532e-105, true);
|
||||
testGetAtIndex(float64list, 1.4260258159703532e-105);
|
||||
}
|
||||
testTypedDataRange(true);
|
||||
testUnsignedTypedDataRange(true);
|
||||
|
|
Loading…
Reference in a new issue