Return original type for Float32List/Float64List

This commit is contained in:
Tyler Dunn 2024-06-13 15:32:09 -04:00
parent 1206c15853
commit dcede74fb6
2 changed files with 11 additions and 32 deletions

View File

@ -58,18 +58,6 @@ class BufferContext {
return _buffer.buffer.asUint32List(_buffer.offsetInBytes + offset, length);
}
@pragma('vm:prefer-inline')
Float32List _asFloat32List(int offset, int length) {
assert(Endian.host == Endian.little);
return _buffer.buffer.asFloat32List(_buffer.offsetInBytes + offset, length);
}
@pragma('vm:prefer-inline')
Float64List _asFloat64List(int offset, int length) {
assert(Endian.host == Endian.little);
return _buffer.buffer.asFloat64List(_buffer.offsetInBytes + offset, length);
}
@pragma('vm:prefer-inline')
double _getFloat64(int offset) => _buffer.getFloat64(offset, Endian.little);
@ -906,6 +894,8 @@ class BoolReader extends Reader<bool> {
/// The reader of lists of 64-bit float values.
///
/// The returned unmodifiable lists lazily read values on access.
///
/// TODO: Return dart:typed_data Float64List type on LE systems
class Float64ListReader extends Reader<List<double>> {
const Float64ListReader();
@ -915,17 +905,15 @@ class Float64ListReader extends Reader<List<double>> {
@override
@pragma('vm:prefer-inline')
List<double> read(BufferContext bc, int offset) {
if (Endian.host == Endian.little) {
final listOffset = bc.derefObject(offset);
final length = bc._getUint32(listOffset);
return bc._asFloat64List(listOffset + _sizeofUint32, length);
} else {
return _FbFloat64List(bc, bc.derefObject(offset));
}
}
List<double> read(BufferContext bc, int offset) =>
_FbFloat64List(bc, bc.derefObject(offset));
}
/// The reader of lists of 32-bit float values.
///
/// The returned unmodifiable lists lazily read values on access.
///
/// TODO: Return dart:typed_data Float32List type on LE systems
class Float32ListReader extends Reader<List<double>> {
const Float32ListReader();
@ -935,15 +923,8 @@ class Float32ListReader extends Reader<List<double>> {
@override
@pragma('vm:prefer-inline')
List<double> read(BufferContext bc, int offset) {
if (Endian.host == Endian.little) {
final listOffset = bc.derefObject(offset);
final length = bc._getUint32(listOffset);
return bc._asFloat32List(listOffset + _sizeofUint32, length);
} else {
return _FbFloat32List(bc, bc.derefObject(offset));
}
}
List<double> read(BufferContext bc, int offset) =>
_FbFloat32List(bc, bc.derefObject(offset));
}
class Float64Reader extends Reader<double> {

View File

@ -545,7 +545,6 @@ class BuilderTest {
// read and verify
BufferContext buf = BufferContext.fromBytes(byteList);
List<double> items = const Float64ListReader().read(buf, 0);
expect(items is Float64List, Endian.host == Endian.little);
expect(items, hasLength(values.length));
for (int i = 0; i < values.length; i++) {
expect(values[i], closeTo(items[i], .001));
@ -565,7 +564,6 @@ class BuilderTest {
// read and verify
BufferContext buf = BufferContext.fromBytes(byteList);
List<double> items = const Float32ListReader().read(buf, 0);
expect(items is Float32List, Endian.host == Endian.little);
expect(items, hasLength(5));
for (int i = 0; i < values.length; i++) {
expect(values[i], closeTo(items[i], .001));