Index: lib/coded_buffer_writer.dart |
diff --git a/lib/coded_buffer_writer.dart b/lib/coded_buffer_writer.dart |
index 558dbb278e5eb271cc6a7a9102816910d22bed4f..a00c87088a6f7f6d9f7f4c3468a4c1e797b985a3 100644 |
--- a/lib/coded_buffer_writer.dart |
+++ b/lib/coded_buffer_writer.dart |
@@ -24,12 +24,14 @@ class CodedBufferWriter { |
return new ByteData.view(result.buffer, 0, i); |
} |
- static ByteData _toVarint64(ByteData value) { |
+ static ByteData _toVarint64(Int64 value) { |
// Varint encoding always fits into 10 bytes. |
Uint8List result = new Uint8List(10); |
int i = 0; |
- int lo = value.getUint32(0, Endianness.LITTLE_ENDIAN); |
- int hi = value.getUint32(4, Endianness.LITTLE_ENDIAN); |
+ ByteData bytes = |
+ new ByteData.view(new Uint8List.fromList(value.toBytes()).buffer, 0, 8); |
+ int lo = bytes.getUint32(0, Endianness.LITTLE_ENDIAN); |
+ int hi = bytes.getUint32(4, Endianness.LITTLE_ENDIAN); |
while (hi > 0 || lo >= 0x80) { |
result[i++] = 0x80 | (lo & 0x7f); |
lo = (lo >> 7) | ((hi & 0x7f) << 25); |
@@ -55,24 +57,16 @@ class CodedBufferWriter { |
int _encodeZigZag32(int value) => (value << 1) ^ (value >> 31); |
- ByteData _encodeZigZag64(ByteData value) { |
- int lo = value.getUint32(0, Endianness.LITTLE_ENDIAN); |
- int hi = value.getUint32(4, Endianness.LITTLE_ENDIAN); |
- int newHi = (hi << 1) | (lo >> 31); |
- int newLo = (lo << 1); |
- if ((hi >> 31) == 1) { |
- newHi ^= 0xffffffff; |
- newLo ^= 0xffffffff; |
- } |
- return new ByteData(8) |
- ..setUint32(0, newLo, Endianness.LITTLE_ENDIAN) |
- ..setUint32(4, newHi, Endianness.LITTLE_ENDIAN); |
- } |
- |
+ Int64 _encodeZigZag64(Int64 value) => (value << 1) ^ (value >> 63); |
- makeByteData32(int value) => |
+ ByteData makeByteData32(int value) => |
new ByteData(4)..setUint32(0, value, Endianness.LITTLE_ENDIAN); |
+ ByteData makeByteData64(Int64 value) { |
+ var data = new Uint8List.fromList(value.toBytes()); |
+ return new ByteData.view(data.buffer, 0, 8); |
+ } |
+ |
return new Map<int, dynamic>() |
..[GeneratedMessage._BOOL_BIT] = makeWriter( |
(value) => _int32ToBytes(value ? 1 : 0)) |
@@ -113,13 +107,13 @@ class CodedBufferWriter { |
..[GeneratedMessage._SINT32_BIT] = makeWriter( |
(int value) => _int32ToBytes(_encodeZigZag32(value))) |
..[GeneratedMessage._SINT64_BIT] = makeWriter( |
- (ByteData value) => _toVarint64(_encodeZigZag64(value))) |
+ (Int64 value) => _toVarint64(_encodeZigZag64(value))) |
..[GeneratedMessage._UINT32_BIT] = makeWriter(_toVarint32) |
..[GeneratedMessage._UINT64_BIT] = makeWriter(_toVarint64) |
..[GeneratedMessage._FIXED32_BIT] = makeWriter(makeByteData32) |
- ..[GeneratedMessage._FIXED64_BIT] = makeWriter((x) => x) |
+ ..[GeneratedMessage._FIXED64_BIT] = makeWriter(makeByteData64) |
..[GeneratedMessage._SFIXED32_BIT] = makeWriter(makeByteData32) |
- ..[GeneratedMessage._SFIXED64_BIT] = makeWriter((x) => x) |
+ ..[GeneratedMessage._SFIXED64_BIT] = makeWriter(makeByteData64) |
..[GeneratedMessage._MESSAGE_BIT] = (output, value) { |
output._withDeferredSizeCalculation(() { |
value.writeToCodedBufferWriter(output); |