add FarPointer.set and WirePointer.setOffsetAndKind. unit tests pass

This commit is contained in:
David Renshaw 2014-06-17 17:56:33 -04:00
parent 58417744ff
commit bf7bcaa56f
5 changed files with 18 additions and 3 deletions

View file

@ -18,7 +18,13 @@ class EncodingSuite extends FunSuite {
val message = new MessageBuilder(5, BuilderArena.AllocationStrategy.FIXED_SIZE);
val allTypes = message.initRoot(TestAllTypes.Builder.factory);
TestUtil.initTestMessage(allTypes);
//TestUtil.checkTestMessage(allTypes);
TestUtil.checkTestMessage(allTypes);
}
// to debug, do this:
//Serialize.writeMessage((new java.io.FileOutputStream("/Users/dwrensha/Desktop/test.dat")).getChannel(),
// message);
}

View file

@ -21,6 +21,7 @@ object TestUtil {
builder.setTextField(new Text.Reader("foo"));
// builder.setDataField(data("bar"));
{
val subBuilder = builder.initStructField();
subBuilder.setVoidField(org.capnproto.Void.VOID);
subBuilder.setBoolField(true);
@ -44,7 +45,6 @@ object TestUtil {
}
builder.setEnumField(TestEnum.CORGE);
builder.initVoidList(6);
}

View file

@ -18,4 +18,9 @@ final class FarPointer {
public static void setSegmentId(ByteBuffer buffer, int offset, int segmentId) {
buffer.putInt(8 * offset + 4, segmentId);
}
public static void set(ByteBuffer buffer, int offset, boolean isDoubleFar, int pos) {
int idf = isDoubleFar ? 1 : 0;
WirePointer.setOffsetAndKind(buffer, offset, (pos << 3) | (idf << 2) | WirePointer.FAR);
}
}

View file

@ -38,7 +38,7 @@ final class WireHelpers {
//# Set up the original pointer to be a far pointer to
//# the new segment.
WirePointer.setKindAndTarget(segment.buffer, refOffset, WirePointer.FAR, allocation.offset);
FarPointer.set(segment.buffer, refOffset, false, allocation.offset);
FarPointer.setSegmentId(segment.buffer, refOffset, allocation.segment.id);
//# Initialize the landing pad to indicate that the

View file

@ -29,6 +29,10 @@ final class WirePointer {
(((targetOffset - offset) - 1) << 2) | kind);
}
public static void setOffsetAndKind(ByteBuffer buffer, int offset, int offsetAndKind) {
buffer.putInt(offset * 8, offsetAndKind);
}
public static int inlineCompositeListElementCount(long wirePointer) {
return offsetAndKind(wirePointer) >>> 2;
}