Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(520)

Unified Diff: lib/coded_buffer_writer.dart

Issue 25634007: Update the protocol buffer library to use Int64 from the fixnum package (Closed) Base URL: https://github.com/dart-lang/dart-protobuf.git@master
Patch Set: Minor fixes Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/coded_buffer_reader.dart ('k') | lib/generated_message.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « lib/coded_buffer_reader.dart ('k') | lib/generated_message.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698