generalise AnyPointer setAs AnyPointer

This commit is contained in:
Vaci Koblizek 2020-11-10 11:34:26 +00:00
parent f8cdfdea09
commit 91a93734e1
2 changed files with 14 additions and 16 deletions

View file

@ -853,10 +853,8 @@ public class EncodingTest {
MessageBuilder message2 = new MessageBuilder();
AnyPointer.Builder root2 = message2.initRoot(AnyPointer.factory);
root2.set(message1.getRoot(AnyPointer.factory).asReader());
root2.setAs(AnyPointer.factory, message1.getRoot(AnyPointer.factory).asReader());
TestUtil.checkTestMessage(root2.getAs(Test.TestAllTypes.factory));
}
}

View file

@ -22,7 +22,10 @@
package org.capnproto;
public final class AnyPointer {
public static final class Factory implements PointerFactory<Builder, Reader> {
public static final class Factory
implements PointerFactory<Builder, Reader>,
SetPointerBuilder<Builder, Reader>
{
public final Reader fromPointerReader(SegmentReader segment, int pointer, int nestingLimit) {
return new Reader(segment, pointer, nestingLimit);
}
@ -34,6 +37,15 @@ public final class AnyPointer {
result.clear();
return result;
}
public void setPointerBuilder(SegmentBuilder segment, int pointer, Reader value) {
if (value.isNull()) {
WireHelpers.zeroObject(segment, pointer);
WireHelpers.zeroPointerAndFars(segment, pointer);
}
else {
WireHelpers.copyPointer(segment, pointer, value.segment, value.pointer, value.nestingLimit);
}
}
}
public static final Factory factory = new Factory();
@ -86,18 +98,6 @@ public final class AnyPointer {
factory.setPointerBuilder(this.segment, this.pointer, reader);
}
public void set(AnyPointer.Reader reader) {
if (reader.isNull()) {
WireHelpers.zeroObject(this.segment, this.pointer);
WireHelpers.zeroPointerAndFars(this.segment, this.pointer);
}
else {
WireHelpers.copyPointer(
this.segment, this.pointer,
reader.segment, reader.pointer, reader.nestingLimit);
}
}
public final Reader asReader() {
return new Reader(segment, pointer, java.lang.Integer.MAX_VALUE);
}