From ec024a25979bc14dfcd258e0d309fce78175337c Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sun, 26 Oct 2014 18:22:48 -0400 Subject: [PATCH] move WirePointer.get() to SegmentReader --- .../java/org/capnproto/SegmentReader.java | 4 +++ .../main/java/org/capnproto/WireHelpers.java | 36 ++++++++++--------- .../main/java/org/capnproto/WirePointer.java | 4 --- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/SegmentReader.java b/runtime/src/main/java/org/capnproto/SegmentReader.java index 0ce2aa3..82f8330 100644 --- a/runtime/src/main/java/org/capnproto/SegmentReader.java +++ b/runtime/src/main/java/org/capnproto/SegmentReader.java @@ -34,4 +34,8 @@ public class SegmentReader { } public static final SegmentReader EMPTY = new SegmentReader(ByteBuffer.allocate(8), null); + + public final long get(int index) { + return buffer.getLong(index * Constants.BYTES_PER_WORD); + } } diff --git a/runtime/src/main/java/org/capnproto/WireHelpers.java b/runtime/src/main/java/org/capnproto/WireHelpers.java index d8f0c1b..c164edd 100644 --- a/runtime/src/main/java/org/capnproto/WireHelpers.java +++ b/runtime/src/main/java/org/capnproto/WireHelpers.java @@ -110,7 +110,7 @@ final class WireHelpers { SegmentBuilder resultSegment = segment.getArena().getSegment(FarPointer.getSegmentId(ref)); int padOffset = FarPointer.positionInSegment(ref); - long pad = WirePointer.get(resultSegment.buffer, padOffset); + long pad = resultSegment.get(padOffset); if (! FarPointer.isDoubleFar(ref)) { return new FollowBuilderFarsResult(WirePointer.target(padOffset, pad), pad, resultSegment); } @@ -140,7 +140,7 @@ final class WireHelpers { SegmentReader resultSegment = segment.arena.tryGetSegment(FarPointer.getSegmentId(ref)); int padOffset = FarPointer.positionInSegment(ref); - long pad = WirePointer.get(resultSegment.buffer, padOffset); + long pad = resultSegment.get(padOffset); int padWords = FarPointer.isDoubleFar(ref) ? 2 : 1; // TODO read limiting @@ -187,7 +187,7 @@ final class WireHelpers { StructSize size, SegmentReader defaultSegment, int defaultOffset) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); int target = WirePointer.target(refOffset, ref); if (WirePointer.isNull(ref)) { if (defaultSegment == null) { @@ -264,7 +264,7 @@ final class WireHelpers { int defaultOffset) { assert elementSize != ElementSize.INLINE_COMPOSITE : "Use getStructList{Element,Field} for structs"; - long origRef = WirePointer.get(origSegment.buffer, origRefOffset); + long origRef = origSegment.get(origRefOffset); int origRefTarget = WirePointer.target(origRefOffset, origRef); if (WirePointer.isNull(origRef)) { @@ -320,7 +320,7 @@ final class WireHelpers { StructSize elementSize, SegmentReader defaultSegment, int defaultOffset) { - long origRef = WirePointer.get(origSegment.buffer, origRefOffset); + long origRef = origSegment.get(origRefOffset); int origRefTarget = WirePointer.target(origRefOffset, origRef); if (WirePointer.isNull(origRef)) { @@ -337,7 +337,9 @@ final class WireHelpers { byte oldSize = ListPointer.elementSize(resolved.ref); if (oldSize == ElementSize.INLINE_COMPOSITE) { - // ... + //# Existing list is INLINE_COMPOSITE, but we need to verify that the sizes match. + long oldTag = resolved.segment.get(resolved.ptr); + } else { // ... } @@ -380,7 +382,7 @@ final class WireHelpers { ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { @@ -444,7 +446,7 @@ final class WireHelpers { ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { @@ -481,14 +483,14 @@ final class WireHelpers { SegmentReader defaultSegment, int defaultOffset, int nestingLimit) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); if (WirePointer.isNull(ref)) { if (defaultSegment == null) { return factory.constructReader(SegmentReader.EMPTY, 0, 0, 0, (short) 0, 0x7fffffff); } else { segment = defaultSegment; refOffset = defaultOffset; - ref = WirePointer.get(segment.buffer, refOffset); + ref = segment.get(refOffset); } } @@ -620,7 +622,7 @@ final class WireHelpers { // readStructPointer(), etc. because they do type checking whereas here we want to accept any // valid pointer. - long srcRef = WirePointer.get(srcSegment.buffer, srcOffset); + long srcRef = srcSegment.get(srcOffset); if (WirePointer.isNull(srcRef)) { dstSegment.buffer.putLong(dstOffset * 8, 0L); @@ -650,7 +652,7 @@ final class WireHelpers { } if (elementSize == ElementSize.INLINE_COMPOSITE) { int wordCount = ListPointer.inlineCompositeWordCount(resolved.ref); - long tag = WirePointer.get(resolved.segment.buffer, resolved.ptr); + long tag = resolved.segment.get(resolved.ptr); int ptr = resolved.ptr + 1; resolved.segment.arena.checkReadLimit(wordCount + 1); @@ -707,7 +709,7 @@ final class WireHelpers { byte expectedElementSize, int nestingLimit) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); if (WirePointer.isNull(ref)) { if (defaultSegment == null) { @@ -715,7 +717,7 @@ final class WireHelpers { } else { segment = defaultSegment; refOffset = defaultOffset; - ref = WirePointer.get(segment.buffer, refOffset); + ref = segment.get(refOffset); } } @@ -731,7 +733,7 @@ final class WireHelpers { case ElementSize.INLINE_COMPOSITE : { int wordCount = ListPointer.inlineCompositeWordCount(resolved.ref); - long tag = WirePointer.get(resolved.segment.buffer, resolved.ptr); + long tag = resolved.segment.get(resolved.ptr); int ptr = resolved.ptr + 1; resolved.segment.arena.checkReadLimit(wordCount + 1); @@ -799,7 +801,7 @@ final class WireHelpers { ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { @@ -838,7 +840,7 @@ final class WireHelpers { ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) { - long ref = WirePointer.get(segment.buffer, refOffset); + long ref = segment.get(refOffset); if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { diff --git a/runtime/src/main/java/org/capnproto/WirePointer.java b/runtime/src/main/java/org/capnproto/WirePointer.java index 23920d4..b9f6e2e 100644 --- a/runtime/src/main/java/org/capnproto/WirePointer.java +++ b/runtime/src/main/java/org/capnproto/WirePointer.java @@ -81,8 +81,4 @@ final class WirePointer { public static int upper32Bits(long wirePointer) { return (int)(wirePointer >>> 32); } - - public static long get(ByteBuffer buffer, int offset) { - return buffer.getLong(offset * 8); - } }