setter method for constrained anypointer fields

This commit is contained in:
David Renshaw 2014-10-29 09:26:50 -04:00
parent bf3384c926
commit 5f98572b7c
10 changed files with 58 additions and 17 deletions

View file

@ -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"),
}; };

View file

@ -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") {

View file

@ -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 {}

View file

@ -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);

View file

@ -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);

View file

@ -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> {

View file

@ -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);
} }

View file

@ -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);
} }
} }

View file

@ -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,

View file

@ -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);