|
4 | 4 |
|
5 | 5 | import 'dart:collection'; |
6 | 6 | import 'dart:convert'; |
| 7 | +import 'dart:io'; |
7 | 8 | import 'dart:typed_data'; |
8 | 9 |
|
9 | 10 | import 'package:convert/convert.dart'; |
@@ -104,6 +105,8 @@ class JsonBufferBuilder { |
104 | 105 | _buildDigest(pointer, byteSink); |
105 | 106 | case Type.uint32: |
106 | 107 | byteSink.addSlice(_buffer, pointer, pointer + 4, false); |
| 108 | + case Type.float64: |
| 109 | + byteSink.addSlice(_buffer, pointer, pointer + 8, false); |
107 | 110 | case Type.boolean: |
108 | 111 | // We use [1] and [2] because [0] is `null`. |
109 | 112 | byteSink.add(_readBoolean(pointer) ? const [2] : const [1]); |
@@ -151,6 +154,8 @@ class JsonBufferBuilder { |
151 | 154 | return _readPointer(pointer); |
152 | 155 | case Type.uint32: |
153 | 156 | return _readUint32(pointer); |
| 157 | + case Type.float64: |
| 158 | + return _readFloat64(pointer); |
154 | 159 | case Type.boolean: |
155 | 160 | return _readBoolean(pointer); |
156 | 161 | case Type.anyPointer: |
@@ -206,6 +211,9 @@ class JsonBufferBuilder { |
206 | 211 | case Type.uint32: |
207 | 212 | _writeUint32(pointer, value as int); |
208 | 213 |
|
| 214 | + case Type.float64: |
| 215 | + _writeFloat64(pointer, value as double); |
| 216 | + |
209 | 217 | case Type.boolean: |
210 | 218 | _writeBoolean(pointer, value as bool); |
211 | 219 |
|
@@ -325,6 +333,24 @@ class JsonBufferBuilder { |
325 | 333 | (_buffer[pointer + 2] << 16) + |
326 | 334 | (_buffer[pointer + 3] << 24); |
327 | 335 |
|
| 336 | + /// Writes [value] at [pointer]. |
| 337 | + void _writeFloat64(_Pointer pointer, double value) { |
| 338 | + _explanations?.push('_writeFloat64 $value'); |
| 339 | + __writeFloat64(pointer, value); |
| 340 | + _explanations?.pop(); |
| 341 | + } |
| 342 | + |
| 343 | + void __writeFloat64(_Pointer pointer, double value) { |
| 344 | + final byteData = ByteData(8); |
| 345 | + byteData.setFloat64(0, value, Endian.big); |
| 346 | + _setRange(pointer, pointer + 8, byteData.buffer.asUint8List()); |
| 347 | + } |
| 348 | + |
| 349 | + /// Reads the float64 at [_Pointer]. |
| 350 | + double _readFloat64(_Pointer pointer) { |
| 351 | + return ByteData.sublistView(_buffer).getFloat64(pointer, Endian.big); |
| 352 | + } |
| 353 | + |
328 | 354 | /// Writes [boolean] at [pointer]. |
329 | 355 | void _writeBoolean(_Pointer pointer, bool boolean) { |
330 | 356 | _explanations?.push('_writeBoolean $boolean'); |
|
0 commit comments