fix multi-segment reading

This commit is contained in:
David Renshaw 2014-06-17 21:49:42 -04:00
parent 331c4f4e89
commit 1a3561c0f7
2 changed files with 4 additions and 7 deletions

View file

@ -21,7 +21,7 @@ class EncodingSuite extends FunSuite {
TestUtil.initTestMessage(allTypes);
TestUtil.checkTestMessage(allTypes);
//TestUtil.checkTestMessage(allTypes.asReader());
TestUtil.checkTestMessage(allTypes.asReader());
}
// to debug, do this:

View file

@ -111,20 +111,17 @@ final class WireHelpers {
//# If the segment is null, this is an unchecked message,
//# so there are no FAR pointers.
if (segment != null && WirePointer.kind(ref) == WirePointer.FAR) {
SegmentReader resultSegment = segment.arena.tryGetSegment(FarPointer.getSegmentId(ref));
int ptr = FarPointer.positionInSegment(ref);
int padOffset = FarPointer.positionInSegment(ref);
long pad = WirePointer.get(resultSegment.buffer, padOffset);
int padWords = FarPointer.isDoubleFar(ref) ? 2 : 1;
// TODO read limiting
int pad = ptr;
if (!FarPointer.isDoubleFar(ref)) {
return new FollowFarsResult(WirePointer.target(pad,
WirePointer.get(resultSegment.buffer, pad)),
return new FollowFarsResult(WirePointer.target(padOffset, pad),
pad, resultSegment);
} else {
//# Landing pad is another far pointer. It is