generalise AnyPointer setAs AnyPointer
This commit is contained in:
parent
dcd9eb37c7
commit
f3bb329e96
3 changed files with 13 additions and 21 deletions
|
@ -861,10 +861,8 @@ public class EncodingTest {
|
||||||
|
|
||||||
MessageBuilder message2 = new MessageBuilder();
|
MessageBuilder message2 = new MessageBuilder();
|
||||||
AnyPointer.Builder root2 = message2.initRoot(AnyPointer.factory);
|
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));
|
TestUtil.checkTestMessage(root2.getAs(Test.TestAllTypes.factory));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1382,7 +1382,7 @@ final class RpcState<VatId> {
|
||||||
// Just forward to another local call
|
// Just forward to another local call
|
||||||
var promise = request.send();
|
var promise = request.send();
|
||||||
var voidPromise = promise.thenAccept(results -> {
|
var voidPromise = promise.thenAccept(results -> {
|
||||||
getResults(0).set(results);
|
getResults(0).setAs(AnyPointer.factory, results);
|
||||||
});
|
});
|
||||||
return new ClientHook.VoidPromiseAndPipeline(voidPromise, promise.pipeline().hook);
|
return new ClientHook.VoidPromiseAndPipeline(voidPromise, promise.pipeline().hook);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,8 @@ package org.capnproto;
|
||||||
|
|
||||||
public final class AnyPointer {
|
public final class AnyPointer {
|
||||||
public static final class Factory
|
public static final class Factory
|
||||||
implements PointerFactory<Builder, Reader> {
|
implements PointerFactory<Builder, Reader>,
|
||||||
|
SetPointerBuilder<Builder, Reader> {
|
||||||
public final Reader fromPointerReader(SegmentReader segment, CapTableReader capTable, int pointer, int nestingLimit) {
|
public final Reader fromPointerReader(SegmentReader segment, CapTableReader capTable, int pointer, int nestingLimit) {
|
||||||
return new Reader(segment, capTable, pointer, nestingLimit);
|
return new Reader(segment, capTable, pointer, nestingLimit);
|
||||||
}
|
}
|
||||||
|
@ -35,6 +36,15 @@ public final class AnyPointer {
|
||||||
result.clear();
|
result.clear();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
public void setPointerBuilder(SegmentBuilder segment, CapTableBuilder capTable, int pointer, Reader value) {
|
||||||
|
if (value.isNull()) {
|
||||||
|
WireHelpers.zeroObject(segment, capTable, pointer);
|
||||||
|
WireHelpers.zeroPointerAndFars(segment, pointer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
WireHelpers.copyPointer(segment, capTable, pointer, value.segment, value.capTable, value.pointer, value.nestingLimit);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public static final Factory factory = new Factory();
|
public static final Factory factory = new Factory();
|
||||||
|
|
||||||
|
@ -128,22 +138,6 @@ public final class AnyPointer {
|
||||||
factory.setPointerBuilder(this.segment, this.capTable, this.pointer, reader);
|
factory.setPointerBuilder(this.segment, this.capTable, this.pointer, reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(AnyPointer.Reader reader) {
|
|
||||||
if (reader.isNull()) {
|
|
||||||
WireHelpers.zeroObject(this.segment, this.capTable, this.pointer);
|
|
||||||
WireHelpers.zeroPointerAndFars(this.segment, this.pointer);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
WireHelpers.copyPointer(
|
|
||||||
this.segment, this.capTable, this.pointer,
|
|
||||||
reader.segment, reader.capTable, reader.pointer, reader.nestingLimit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final void setAsCap(Capability.Client cap) {
|
|
||||||
WireHelpers.setCapabilityPointer(this.segment, capTable, this.pointer, cap.getHook());
|
|
||||||
}
|
|
||||||
|
|
||||||
public final Reader asReader() {
|
public final Reader asReader() {
|
||||||
return new Reader(segment, this.capTable, pointer, java.lang.Integer.MAX_VALUE);
|
return new Reader(segment, this.capTable, pointer, java.lang.Integer.MAX_VALUE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue