setter method for constrained anypointer fields
This commit is contained in:
parent
bf3384c926
commit
5f98572b7c
10 changed files with 58 additions and 17 deletions
|
@ -1031,6 +1031,16 @@ private:
|
||||||
unionDiscrim.set,
|
unionDiscrim.set,
|
||||||
spaces(indent), " return _initPointerField(", factoryArg, ", ", offset, ", size);\n",
|
spaces(indent), " return _initPointerField(", factoryArg, ", ", offset, ", size);\n",
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
|
|
||||||
|
(field.getType().getBrandParameter() == nullptr ? kj::strTree() :
|
||||||
|
kj::strTree(spaces(indent), " public <", readerType, "> void set", titleCase,
|
||||||
|
"(org.capnproto.SetPointerBuilder<", builderType, ",", readerType, "> factory,",
|
||||||
|
readerType, " value) {\n",
|
||||||
|
unionDiscrim.set,
|
||||||
|
spaces(indent), " _setPointerField(factory, ", offset, ", value);\n",
|
||||||
|
spaces(indent), " }\n")),
|
||||||
|
|
||||||
|
|
||||||
"\n"),
|
"\n"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -63,18 +63,23 @@ class EncodingSuite extends FunSuite {
|
||||||
val factory = TestGenerics.newFactory(TestAllTypes.factory, Text.factory);
|
val factory = TestGenerics.newFactory(TestAllTypes.factory, Text.factory);
|
||||||
val root = message.initRoot(factory);
|
val root = message.initRoot(factory);
|
||||||
TestUtil.initTestMessage(root.getFoo());
|
TestUtil.initTestMessage(root.getFoo());
|
||||||
//root.getRev().setFoo(Text.factory, new Text.Reader("Hello"));
|
root.getDub().setFoo(Text.factory, new Text.Reader("Hello"));
|
||||||
val bar = root.getRev().initBar(1);
|
val bar = root.getDub().initBar(1);
|
||||||
bar.set(0, 11);
|
bar.set(0, 11);
|
||||||
val dubFoo = root.getDub().getFoo()
|
val revBar = root.getRev().getBar()
|
||||||
dubFoo.setInt8Field(111);
|
revBar.setInt8Field(111);
|
||||||
var boolList = dubFoo.initBoolList(2);
|
var boolList = revBar.initBoolList(2);
|
||||||
boolList.set(0, false);
|
boolList.set(0, false);
|
||||||
boolList.set(1, true);
|
boolList.set(1, true);
|
||||||
|
|
||||||
|
|
||||||
TestUtil.checkTestMessage(root.getFoo());
|
TestUtil.checkTestMessage(root.getFoo());
|
||||||
TestUtil.checkTestMessage(root.asReader(factory).getFoo());
|
val rootReader = root.asReader(factory);
|
||||||
|
TestUtil.checkTestMessage(rootReader.getFoo());
|
||||||
|
val dubReader = root.getDub();
|
||||||
|
dubReader.getFoo().toString() should equal ("Hello");
|
||||||
|
val barReader = dubReader.getBar();
|
||||||
|
barReader.size() should equal (1);
|
||||||
|
barReader.get(0) should equal (11);
|
||||||
}
|
}
|
||||||
|
|
||||||
test("Defaults") {
|
test("Defaults") {
|
||||||
|
|
|
@ -325,8 +325,8 @@ struct TestNewVersion {
|
||||||
struct TestGenerics(Foo, Bar) {
|
struct TestGenerics(Foo, Bar) {
|
||||||
foo @0 :Foo;
|
foo @0 :Foo;
|
||||||
bar @1 :Bar;
|
bar @1 :Bar;
|
||||||
rev @2 :TestGenerics(Text, List(UInt8));
|
rev @2 :TestGenerics(Bar, Foo);
|
||||||
dub @3 :TestGenerics(Foo, Bar);
|
dub @3 :TestGenerics(Text, List(UInt8));
|
||||||
|
|
||||||
struct Inner {
|
struct Inner {
|
||||||
foo @0 :Foo;
|
foo @0 :Foo;
|
||||||
|
@ -348,6 +348,33 @@ struct TestGenerics(Foo, Bar) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct TestGenericsWrapper(Foo, Bar) {
|
||||||
|
value @0 :TestGenerics(Foo, Bar);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TestGenericsWrapper2 {
|
||||||
|
value @0 :TestGenericsWrapper(Text, TestAllTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TestUseGenerics {
|
||||||
|
basic @0 :TestGenerics(TestAllTypes, TestAnyPointer);
|
||||||
|
inner @1 :TestGenerics(TestAllTypes, TestAnyPointer).Inner;
|
||||||
|
inner2 @2 :TestGenerics(TestAllTypes, TestAnyPointer).Inner2(Text);
|
||||||
|
unspecified @3 :TestGenerics;
|
||||||
|
unspecifiedInner @4 :TestGenerics.Inner2(Text);
|
||||||
|
wrapper @8 :TestGenericsWrapper(TestAllTypes, TestAnyPointer);
|
||||||
|
|
||||||
|
default @5 :TestGenerics(TestAllTypes, Text) =
|
||||||
|
(foo = (int16Field = 123), rev = (foo = "text", rev = (foo = (int16Field = 321))));
|
||||||
|
defaultInner @6 :TestGenerics(TestAllTypes, Text).Inner =
|
||||||
|
(foo = (int16Field = 123), bar = "text");
|
||||||
|
defaultUser @7 :TestUseGenerics = (basic = (foo = (int16Field = 123)));
|
||||||
|
defaultWrapper @9 :TestGenericsWrapper(Text, TestAllTypes) =
|
||||||
|
(value = (foo = "text", rev = (foo = (int16Field = 321))));
|
||||||
|
defaultWrapper2 @10 :TestGenericsWrapper2 =
|
||||||
|
(value = (value = (foo = "text", rev = (foo = (int16Field = 321)))));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct TestEmptyStruct {}
|
struct TestEmptyStruct {}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ public final class Data {
|
||||||
public static final class Factory implements FromPointerReaderBlobDefault<Reader>,
|
public static final class Factory implements FromPointerReaderBlobDefault<Reader>,
|
||||||
PointerFactory<Builder, Reader>,
|
PointerFactory<Builder, Reader>,
|
||||||
FromPointerBuilderBlobDefault<Builder>,
|
FromPointerBuilderBlobDefault<Builder>,
|
||||||
SetPointerBuilder<Reader> {
|
SetPointerBuilder<Builder, Reader> {
|
||||||
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
||||||
int defaultOffset, int defaultSize) {
|
int defaultOffset, int defaultSize) {
|
||||||
return WireHelpers.readDataPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
|
return WireHelpers.readDataPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class ListBuilder {
|
||||||
elementCount);
|
elementCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final <Reader> void _setPointerElement(SetPointerBuilder<Reader> factory, int index, Reader value) {
|
protected final <Builder, Reader> void _setPointerElement(SetPointerBuilder<Builder, Reader> factory, int index, Reader value) {
|
||||||
factory.setPointerBuilder(this.segment,
|
factory.setPointerBuilder(this.segment,
|
||||||
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
|
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
|
||||||
value);
|
value);
|
||||||
|
|
|
@ -24,7 +24,7 @@ package org.capnproto;
|
||||||
public abstract class ListFactory<Builder, Reader extends ListReader>
|
public abstract class ListFactory<Builder, Reader extends ListReader>
|
||||||
implements ListBuilder.Factory<Builder>,
|
implements ListBuilder.Factory<Builder>,
|
||||||
FromPointerBuilderRefDefault<Builder>,
|
FromPointerBuilderRefDefault<Builder>,
|
||||||
SetPointerBuilder<Reader>,
|
SetPointerBuilder<Builder, Reader>,
|
||||||
ListReader.Factory<Reader>,
|
ListReader.Factory<Reader>,
|
||||||
PointerFactory<Builder, Reader>,
|
PointerFactory<Builder, Reader>,
|
||||||
FromPointerReaderRefDefault<Reader> {
|
FromPointerReaderRefDefault<Reader> {
|
||||||
|
|
|
@ -21,6 +21,6 @@
|
||||||
|
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
public interface SetPointerBuilder<Reader> {
|
public interface SetPointerBuilder<Builder, Reader> {
|
||||||
void setPointerBuilder(SegmentBuilder segment, int pointer, Reader value);
|
void setPointerBuilder(SegmentBuilder segment, int pointer, Reader value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,8 +194,7 @@ public class StructBuilder {
|
||||||
return factory.initFromPointerBuilder(this.segment, this.pointers + index, elementCount);
|
return factory.initFromPointerBuilder(this.segment, this.pointers + index, elementCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final <Reader> void _setPointerField(SetPointerBuilder<Reader> factory, int index, Reader value) {
|
protected final <Builder, Reader> void _setPointerField(SetPointerBuilder<Builder, Reader> factory, int index, Reader value) {
|
||||||
factory.setPointerBuilder(this.segment, this.pointers + index, value);
|
factory.setPointerBuilder(this.segment, this.pointers + index, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public abstract class StructFactory<Builder, Reader extends StructReader>
|
||||||
implements PointerFactory<Builder, Reader>,
|
implements PointerFactory<Builder, Reader>,
|
||||||
FromPointerBuilderRefDefault<Builder>,
|
FromPointerBuilderRefDefault<Builder>,
|
||||||
StructBuilder.Factory<Builder>,
|
StructBuilder.Factory<Builder>,
|
||||||
SetPointerBuilder<Reader>,
|
SetPointerBuilder<Builder, Reader>,
|
||||||
FromPointerReaderRefDefault<Reader>,
|
FromPointerReaderRefDefault<Reader>,
|
||||||
StructReader.Factory<Reader> {
|
StructReader.Factory<Reader> {
|
||||||
public final Reader fromPointerReaderRefDefault(SegmentReader segment, int pointer,
|
public final Reader fromPointerReaderRefDefault(SegmentReader segment, int pointer,
|
||||||
|
|
|
@ -28,7 +28,7 @@ public final class Text {
|
||||||
FromPointerReaderBlobDefault<Reader>,
|
FromPointerReaderBlobDefault<Reader>,
|
||||||
FromPointerBuilderBlobDefault<Builder>,
|
FromPointerBuilderBlobDefault<Builder>,
|
||||||
PointerFactory<Builder, Reader>,
|
PointerFactory<Builder, Reader>,
|
||||||
SetPointerBuilder<Reader> {
|
SetPointerBuilder<Builder, Reader> {
|
||||||
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
||||||
int defaultOffset, int defaultSize) {
|
int defaultOffset, int defaultSize) {
|
||||||
return WireHelpers.readTextPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
|
return WireHelpers.readTextPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
|
||||||
|
|
Loading…
Reference in a new issue