set AnyPointer from AnyPointer

This commit is contained in:
Vaci Koblizek 2020-11-09 17:33:20 +00:00
parent 44a8c1e859
commit f8cdfdea09
2 changed files with 25 additions and 0 deletions

View file

@ -844,6 +844,19 @@ public class EncodingTest {
Assert.assertEquals(listReader.get(0).getInt8Field(), 11); Assert.assertEquals(listReader.get(0).getInt8Field(), 11);
TestUtil.checkTestMessage(listReader.get(1)); TestUtil.checkTestMessage(listReader.get(1));
} }
@org.junit.Test
public void testCopyAnyPointer() {
MessageBuilder message1 = new MessageBuilder();
Test.TestAllTypes.Builder root1 = message1.initRoot(Test.TestAllTypes.factory);
TestUtil.initTestMessage(root1);
MessageBuilder message2 = new MessageBuilder();
AnyPointer.Builder root2 = message2.initRoot(AnyPointer.factory);
root2.set(message1.getRoot(AnyPointer.factory).asReader());
TestUtil.checkTestMessage(root2.getAs(Test.TestAllTypes.factory));
}
} }

View file

@ -86,6 +86,18 @@ public final class AnyPointer {
factory.setPointerBuilder(this.segment, this.pointer, reader); 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() { public final Reader asReader() {
return new Reader(segment, pointer, java.lang.Integer.MAX_VALUE); return new Reader(segment, pointer, java.lang.Integer.MAX_VALUE);
} }