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,
spaces(indent), " return _initPointerField(", factoryArg, ", ", offset, ", size);\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"),
};

View file

@ -63,18 +63,23 @@ class EncodingSuite extends FunSuite {
val factory = TestGenerics.newFactory(TestAllTypes.factory, Text.factory);
val root = message.initRoot(factory);
TestUtil.initTestMessage(root.getFoo());
//root.getRev().setFoo(Text.factory, new Text.Reader("Hello"));
val bar = root.getRev().initBar(1);
root.getDub().setFoo(Text.factory, new Text.Reader("Hello"));
val bar = root.getDub().initBar(1);
bar.set(0, 11);
val dubFoo = root.getDub().getFoo()
dubFoo.setInt8Field(111);
var boolList = dubFoo.initBoolList(2);
val revBar = root.getRev().getBar()
revBar.setInt8Field(111);
var boolList = revBar.initBoolList(2);
boolList.set(0, false);
boolList.set(1, true);
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") {

View file

@ -325,8 +325,8 @@ struct TestNewVersion {
struct TestGenerics(Foo, Bar) {
foo @0 :Foo;
bar @1 :Bar;
rev @2 :TestGenerics(Text, List(UInt8));
dub @3 :TestGenerics(Foo, Bar);
rev @2 :TestGenerics(Bar, Foo);
dub @3 :TestGenerics(Text, List(UInt8));
struct Inner {
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 {}

View file

@ -27,7 +27,7 @@ public final class Data {
public static final class Factory implements FromPointerReaderBlobDefault<Reader>,
PointerFactory<Builder, Reader>,
FromPointerBuilderBlobDefault<Builder>,
SetPointerBuilder<Reader> {
SetPointerBuilder<Builder, Reader> {
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
int defaultOffset, int defaultSize) {
return WireHelpers.readDataPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);

View file

@ -138,7 +138,7 @@ public class ListBuilder {
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,
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
value);

View file

@ -24,7 +24,7 @@ package org.capnproto;
public abstract class ListFactory<Builder, Reader extends ListReader>
implements ListBuilder.Factory<Builder>,
FromPointerBuilderRefDefault<Builder>,
SetPointerBuilder<Reader>,
SetPointerBuilder<Builder, Reader>,
ListReader.Factory<Reader>,
PointerFactory<Builder, Reader>,
FromPointerReaderRefDefault<Reader> {

View file

@ -21,6 +21,6 @@
package org.capnproto;
public interface SetPointerBuilder<Reader> {
public interface SetPointerBuilder<Builder, Reader> {
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);
}
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);
}
}

View file

@ -25,7 +25,7 @@ public abstract class StructFactory<Builder, Reader extends StructReader>
implements PointerFactory<Builder, Reader>,
FromPointerBuilderRefDefault<Builder>,
StructBuilder.Factory<Builder>,
SetPointerBuilder<Reader>,
SetPointerBuilder<Builder, Reader>,
FromPointerReaderRefDefault<Reader>,
StructReader.Factory<Reader> {
public final Reader fromPointerReaderRefDefault(SegmentReader segment, int pointer,

View file

@ -28,7 +28,7 @@ public final class Text {
FromPointerReaderBlobDefault<Reader>,
FromPointerBuilderBlobDefault<Builder>,
PointerFactory<Builder, Reader>,
SetPointerBuilder<Reader> {
SetPointerBuilder<Builder, Reader> {
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
int defaultOffset, int defaultSize) {
return WireHelpers.readTextPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);