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

Unified Diff: lib/coded_buffer_reader.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 | « no previous file | lib/coded_buffer_writer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/coded_buffer_reader.dart
diff --git a/lib/coded_buffer_reader.dart b/lib/coded_buffer_reader.dart
index c0cf8d7d26a3ce7de666cdff09fb0916a47c1265..adb52ea226fdb413bc79a500345ee24bba602745 100644
--- a/lib/coded_buffer_reader.dart
+++ b/lib/coded_buffer_reader.dart
@@ -96,16 +96,20 @@ class CodedBufferReader {
}
int readEnum() => readInt32();
- int readInt32() => _readRawVarint64().getInt32(0, Endianness.LITTLE_ENDIAN);
- ByteData readInt64() => _readRawVarint64();
+ int readInt32() => _readRawVarint32();
+ Int64 readInt64() => _readRawVarint64();
int readUint32() => _readRawVarint32();
- ByteData readUint64() => _readRawVarint64();
+ Int64 readUint64() => _readRawVarint64();
int readSint32() => _decodeZigZag32(readUint32());
- ByteData readSint64() => _decodeZigZag64(readUint64());
+ Int64 readSint64() => _decodeZigZag64(readUint64());
int readFixed32() => _readByteData(4).getUint32(0, Endianness.LITTLE_ENDIAN);
- ByteData readFixed64() => readSfixed64();
+ Int64 readFixed64() => readSfixed64();
int readSfixed32() => _readByteData(4).getInt32(0, Endianness.LITTLE_ENDIAN);
- ByteData readSfixed64() => _readByteData(8);
+ Int64 readSfixed64() {
+ var data = _readByteData(8);
+ var view = new Uint8List.view(data.buffer, data.offsetInBytes, 8);
+ return new Int64.fromBytes(view);
+ }
bool readBool() => _readRawVarint32() != 0;
List<int> readBytes() {
int length = readInt32();
@@ -136,18 +140,9 @@ class CodedBufferReader {
return value >> 1;
}
- static ByteData _decodeZigZag64(ByteData value) {
- int lo = value.getUint32(0, Endianness.LITTLE_ENDIAN);
- int hi = value.getUint32(4, Endianness.LITTLE_ENDIAN);
- int newHi = hi >> 1;
- int newLo = (lo >> 1) | ((hi & 0x1) << 31);
- if ((lo & 0x1) == 1) {
- newHi ^= 0xffffffff;
- newLo ^= 0xffffffff;
- }
- return new ByteData(8)
- ..setUint32(0, newLo, Endianness.LITTLE_ENDIAN)
- ..setUint32(4, newHi, Endianness.LITTLE_ENDIAN);
+ static Int64 _decodeZigZag64(Int64 value) {
+ if ((value & 0x1) == 1) value = -value;
+ return value >> 1;
}
int _readRawVarintByte() {
@@ -165,33 +160,29 @@ class CodedBufferReader {
throw new InvalidProtocolBufferException.malformedVarint();
}
- ByteData _readRawVarint64() {
- final result = new ByteData(8);
-
- setPart(index, value) =>
- result..setUint32(index, value, Endianness.LITTLE_ENDIAN);
-
+ Int64 _readRawVarint64() {
int lo = 0;
+ int hi = 0;
// Read low 28 bits.
for (int i = 0; i < 4; i++) {
int byte = _readRawVarintByte();
lo |= (byte & 0x7f) << (i * 7);
- if ((byte & 0x80) == 0) return setPart(0, lo);
+ if ((byte & 0x80) == 0) return new Int64.fromInts(hi, lo);
}
// Read middle 7 bits: 4 low belong to low part above,
// 3 remaining belong to hi.
int byte = _readRawVarintByte();
- setPart(0, lo | (byte & 0xf) << 28);
- int hi = (byte >> 4) & 0x7;
- if ((byte & 0x80) == 0) return setPart(4, hi);
+ lo |= (byte & 0xf) << 28;
+ hi = (byte >> 4) & 0x7;
+ if ((byte & 0x80) == 0) return new Int64.fromInts(hi, lo);
// Read remaining bits of hi.
for (int i = 0; i < 5; i++) {
int byte = _readRawVarintByte();
hi |= (byte & 0x7f) << ((i * 7) + 3);
- if ((byte & 0x80) == 0) return setPart(4, hi);
+ if ((byte & 0x80) == 0) return new Int64.fromInts(hi, lo);
}
throw new InvalidProtocolBufferException.malformedVarint();
}
« no previous file with comments | « no previous file | lib/coded_buffer_writer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698