abstracting
This commit is contained in:
parent
a3c836c619
commit
4d842f0ef7
21 changed files with 78 additions and 84 deletions
|
@ -981,17 +981,16 @@ private:
|
||||||
|
|
||||||
spaces(indent), " public ", type, ".Reader get", titleCase, "() {\n",
|
spaces(indent), " public ", type, ".Reader get", titleCase, "() {\n",
|
||||||
unionDiscrim.check,
|
unionDiscrim.check,
|
||||||
spaces(indent), " return ",
|
spaces(indent), " return ", type, ".factory.fromPointerReader(",
|
||||||
"_getPointerField(", offset,").getStruct(", type, ".factory,", defaultParams, ");\n",
|
"_getPointerField(", offset,"),", defaultParams, ");\n",
|
||||||
spaces(indent), " }\n", "\n"),
|
spaces(indent), " }\n", "\n"),
|
||||||
|
|
||||||
kj::strTree(
|
kj::strTree(
|
||||||
kj::mv(unionDiscrim.builderIsDecl),
|
kj::mv(unionDiscrim.builderIsDecl),
|
||||||
spaces(indent), " public final ", type, ".Builder get", titleCase, "() {\n",
|
spaces(indent), " public final ", type, ".Builder get", titleCase, "() {\n",
|
||||||
unionDiscrim.check,
|
unionDiscrim.check,
|
||||||
spaces(indent), " return ",
|
spaces(indent), " return ", type, ".factory.fromPointerBuilder("
|
||||||
"_getPointerField(", offset, ").getStruct(",
|
"_getPointerField(", offset, "),", defaultParams,");\n",
|
||||||
type, ".factory,", defaultParams,");\n",
|
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
spaces(indent), " public final void set", titleCase, "(", type, ".Reader value) {\n",
|
spaces(indent), " public final void set", titleCase, "(", type, ".Reader value) {\n",
|
||||||
unionDiscrim.set,
|
unionDiscrim.set,
|
||||||
|
@ -999,9 +998,8 @@ private:
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
spaces(indent), " public final ", type, ".Builder init", titleCase, "() {\n",
|
spaces(indent), " public final ", type, ".Builder init", titleCase, "() {\n",
|
||||||
unionDiscrim.set,
|
unionDiscrim.set,
|
||||||
spaces(indent), " return ",
|
spaces(indent), " return ", type, ".factory.initFromPointerBuilder(",
|
||||||
"_getPointerField(", offset, ").initStruct(",
|
"_getPointerField(", offset, "));\n",
|
||||||
type, ".factory", ");\n",
|
|
||||||
spaces(indent), " }\n"),
|
spaces(indent), " }\n"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1094,7 +1092,7 @@ private:
|
||||||
|
|
||||||
spaces(indent), " public final ", builderClass,
|
spaces(indent), " public final ", builderClass,
|
||||||
" init", titleCase, "(int size) {\n",
|
" init", titleCase, "(int size) {\n",
|
||||||
spaces(indent), " return (", listFactory, ").initFromPointerBuilder(_getPointerField(", offset, "), size);\n",
|
spaces(indent), " return (", listFactory, ").initSizedFromPointerBuilder(_getPointerField(", offset, "), size);\n",
|
||||||
spaces(indent), " }\n"),
|
spaces(indent), " }\n"),
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
@ -1187,7 +1185,7 @@ private:
|
||||||
",(short)", structNode.getPointerCount(),
|
",(short)", structNode.getPointerCount(),
|
||||||
", org.capnproto.FieldSize.", FIELD_SIZE_NAMES[(int)structNode.getPreferredListEncoding()], ");\n"),
|
", org.capnproto.FieldSize.", FIELD_SIZE_NAMES[(int)structNode.getPreferredListEncoding()], ");\n"),
|
||||||
|
|
||||||
spaces(indent), " public static class Factory implements org.capnproto.StructFactory<Builder, Reader> {\n",
|
spaces(indent), " public static class Factory extends org.capnproto.StructFactory<Builder, Reader> {\n",
|
||||||
spaces(indent),
|
spaces(indent),
|
||||||
" public final Reader constructReader(org.capnproto.SegmentReader segment, int data,",
|
" public final Reader constructReader(org.capnproto.SegmentReader segment, int data,",
|
||||||
"int pointers, int dataSize, short pointerCount, byte bit0Offset, int nestingLimit) {\n",
|
"int pointers, int dataSize, short pointerCount, byte bit0Offset, int nestingLimit) {\n",
|
||||||
|
@ -1303,10 +1301,9 @@ private:
|
||||||
true,
|
true,
|
||||||
kj::strTree(spaces(indent),
|
kj::strTree(spaces(indent),
|
||||||
"public static final ", typeName_, ".Reader ", upperCase, " =\n",
|
"public static final ", typeName_, ".Reader ", upperCase, " =\n",
|
||||||
spaces(indent), " ",
|
spaces(indent), " ", typeName_, ".factory.fromPointerReader"
|
||||||
"(new org.capnproto.PointerReader(Schemas.b_",
|
"(new org.capnproto.PointerReader(Schemas.b_",
|
||||||
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff)).getStruct(",
|
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff), null, 0);\n")
|
||||||
typeName_, ".factory"");\n")
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1319,7 +1316,7 @@ private:
|
||||||
"public static final ", constType, ' ', upperCase, " =\n",
|
"public static final ", constType, ' ', upperCase, " =\n",
|
||||||
spaces(indent), " (",
|
spaces(indent), " (",
|
||||||
"new org.capnproto.AnyPointer.Reader(new org.capnproto.PointerReader(Schemas.b_",
|
"new org.capnproto.AnyPointer.Reader(new org.capnproto.PointerReader(Schemas.b_",
|
||||||
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff)).getAsList(",
|
kj::hex(proto.getId()), ",", schema.getValueSchemaOffset(), ",0x7fffffff)).getAs(",
|
||||||
makeListFactoryArg(type), "));\n")
|
makeListFactoryArg(type), "));\n")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ class EncodingSuite extends FunSuite {
|
||||||
|
|
||||||
|
|
||||||
val oldReader = {
|
val oldReader = {
|
||||||
val oldVersion = root.getAnyPointerField().initAsStruct(TestOldVersion.factory);
|
val oldVersion = root.getAnyPointerField().initAs(TestOldVersion.factory);
|
||||||
oldVersion.setOld1(123);
|
oldVersion.setOld1(123);
|
||||||
oldVersion.setOld2("foo");
|
oldVersion.setOld2("foo");
|
||||||
val sub = oldVersion.initOld3();
|
val sub = oldVersion.initOld3();
|
||||||
|
|
|
@ -9,11 +9,7 @@ public final class AnyPointer {
|
||||||
this.reader = reader;
|
this.reader = reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final <T> T getAsStruct(StructReader.Factory<T> factory) {
|
public final <T> T getAs(FromPointerReader<T> factory) {
|
||||||
return this.reader.getStruct(factory);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final <T> T getAsList(FromPointerReader<T> factory) {
|
|
||||||
return factory.fromPointerReader(this.reader, null, 0);
|
return factory.fromPointerReader(this.reader, null, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,8 +21,12 @@ public final class AnyPointer {
|
||||||
this.builder = builder;
|
this.builder = builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final <T> T initAsStruct(StructBuilder.Factory<T> factory) {
|
public final <T> T initAs(InitFromPointerBuilder<T> factory) {
|
||||||
return this.builder.initStruct(factory);
|
return factory.initFromPointerBuilder(this.builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final <T> T initAs(InitSizedFromPointerBuilder<T> factory, int elementCount) {
|
||||||
|
return factory.initSizedFromPointerBuilder(this.builder, elementCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void clear() {
|
public final void clear() {
|
||||||
|
|
|
@ -36,7 +36,7 @@ public final class DataList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.POINTER);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.POINTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class EnumList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder<T> initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder<T> initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.TWO_BYTES);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.TWO_BYTES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,5 +2,4 @@ package org.capnproto;
|
||||||
|
|
||||||
public interface FromPointerBuilder<T> {
|
public interface FromPointerBuilder<T> {
|
||||||
T fromPointerBuilder(PointerBuilder builder, SegmentReader defaultSegment, int defaultOffset);
|
T fromPointerBuilder(PointerBuilder builder, SegmentReader defaultSegment, int defaultOffset);
|
||||||
T initFromPointerBuilder(PointerBuilder builder, int elementCount);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package org.capnproto;
|
||||||
|
|
||||||
|
public interface InitFromPointerBuilder<T> {
|
||||||
|
T initFromPointerBuilder(PointerBuilder builder);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package org.capnproto;
|
||||||
|
|
||||||
|
public interface InitSizedFromPointerBuilder<T> {
|
||||||
|
T initSizedFromPointerBuilder(PointerBuilder builder, int elementCount);
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
public interface ListFactory<Builder, Reader> extends ListBuilder.Factory<Builder>, FromPointerBuilder<Builder>,
|
public interface ListFactory<Builder, Reader> extends ListBuilder.Factory<Builder>, FromPointerBuilder<Builder>,
|
||||||
|
InitSizedFromPointerBuilder<Builder>,
|
||||||
ListReader.Factory<Reader>, FromPointerReader<Reader> {
|
ListReader.Factory<Reader>, FromPointerReader<Reader> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class ListList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder<ElementBuilder> initFromPointerBuilder(PointerBuilder builder,
|
public final Builder<ElementBuilder> initSizedFromPointerBuilder(PointerBuilder builder,
|
||||||
int elementCount) {
|
int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.POINTER);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.POINTER);
|
||||||
}
|
}
|
||||||
|
@ -70,9 +70,9 @@ public final class ListList {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Builder<T> extends ListBuilder {
|
public static final class Builder<T> extends ListBuilder {
|
||||||
private final FromPointerBuilder<T> factory;
|
private final ListFactory<T, ?> factory;
|
||||||
|
|
||||||
public Builder(FromPointerBuilder<T> factory,
|
public Builder(ListFactory<T, ?> factory,
|
||||||
SegmentBuilder segment, int ptr,
|
SegmentBuilder segment, int ptr,
|
||||||
int elementCount, int step,
|
int elementCount, int step,
|
||||||
int structDataSize, short structPointerCount){
|
int structDataSize, short structPointerCount){
|
||||||
|
@ -81,7 +81,7 @@ public final class ListList {
|
||||||
}
|
}
|
||||||
|
|
||||||
public final T init(int index, int size) {
|
public final T init(int index, int size) {
|
||||||
return this.factory.initFromPointerBuilder(_getPointerElement(index), size);
|
return this.factory.initSizedFromPointerBuilder(_getPointerElement(index), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final T get(int index) {
|
public final T get(int index) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ public final class MessageBuilder {
|
||||||
throw new Error("unimplemented");
|
throw new Error("unimplemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T initRoot(StructBuilder.Factory <T> factory) {
|
public <T> T initRoot(InitFromPointerBuilder<T> factory) {
|
||||||
SegmentBuilder rootSegment = this.arena.segments.get(0);
|
SegmentBuilder rootSegment = this.arena.segments.get(0);
|
||||||
int location = rootSegment.allocate(1);
|
int location = rootSegment.allocate(1);
|
||||||
if (location == SegmentBuilder.FAILED_ALLOCATION) {
|
if (location == SegmentBuilder.FAILED_ALLOCATION) {
|
||||||
|
@ -31,7 +31,7 @@ public final class MessageBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
AnyPointer.Builder ptr = new AnyPointer.Builder(PointerBuilder.getRoot(rootSegment, location));
|
AnyPointer.Builder ptr = new AnyPointer.Builder(PointerBuilder.getRoot(rootSegment, location));
|
||||||
return ptr.initAsStruct(factory);
|
return ptr.initAs(factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final java.nio.ByteBuffer[] getSegmentsForOutput() {
|
public final java.nio.ByteBuffer[] getSegmentsForOutput() {
|
||||||
|
|
|
@ -9,11 +9,11 @@ public final class MessageReader {
|
||||||
this.arena = new ReaderArena(segmentSlices);
|
this.arena = new ReaderArena(segmentSlices);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T getRoot(StructReader.Factory<T> factory) {
|
public <T> T getRoot(FromPointerReader<T> factory) {
|
||||||
SegmentReader segment = this.arena.tryGetSegment(0);
|
SegmentReader segment = this.arena.tryGetSegment(0);
|
||||||
PointerReader pointerReader = PointerReader.getRoot(segment, 0,
|
PointerReader pointerReader = PointerReader.getRoot(segment, 0,
|
||||||
0x7fffffff /* XXX */);
|
0x7fffffff /* XXX */);
|
||||||
AnyPointer.Reader any = new AnyPointer.Reader(pointerReader);
|
AnyPointer.Reader any = new AnyPointer.Reader(pointerReader);
|
||||||
return any.getAsStruct(factory);
|
return any.getAs(factory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,15 +18,6 @@ public final class PointerBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public final <T> T getStruct(StructBuilder.Factory<T> factory) {
|
|
||||||
return WireHelpers.getWritableStructPointer(factory, this.pointer, this.segment, factory.structSize(), null, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final <T> T getStruct(StructBuilder.Factory<T> factory, SegmentReader defaultReader, int defaultOffset) {
|
|
||||||
return WireHelpers.getWritableStructPointer(factory, this.pointer, this.segment, factory.structSize(),
|
|
||||||
defaultReader, defaultOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final Text.Builder getText() {
|
public final Text.Builder getText() {
|
||||||
return WireHelpers.getWritableTextPointer(
|
return WireHelpers.getWritableTextPointer(
|
||||||
this.pointer, this.segment, null, 0, 0);
|
this.pointer, this.segment, null, 0, 0);
|
||||||
|
@ -54,10 +45,6 @@ public final class PointerBuilder {
|
||||||
defaultSize);
|
defaultSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final <T> T initStruct(StructBuilder.Factory<T> factory) {
|
|
||||||
return WireHelpers.initStructPointer(factory, this.pointer, this.segment, factory.structSize());
|
|
||||||
}
|
|
||||||
|
|
||||||
public final Text.Builder initText(int size) {
|
public final Text.Builder initText(int size) {
|
||||||
return WireHelpers.initTextPointer(this.pointer, this.segment, size);
|
return WireHelpers.initTextPointer(this.pointer, this.segment, size);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,22 +28,6 @@ public final class PointerReader {
|
||||||
return this.segment.buffer.getLong(this.pointer) == 0;
|
return this.segment.buffer.getLong(this.pointer) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T getStruct(StructReader.Factory<T> factory) {
|
|
||||||
return WireHelpers.readStructPointer(factory,
|
|
||||||
this.segment,
|
|
||||||
this.pointer,
|
|
||||||
null, 0,
|
|
||||||
this.nestingLimit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> T getStruct(StructReader.Factory<T> factory, SegmentReader defaultSegment, int defaultOffset) {
|
|
||||||
return WireHelpers.readStructPointer(factory,
|
|
||||||
this.segment,
|
|
||||||
this.pointer,
|
|
||||||
defaultSegment, defaultOffset,
|
|
||||||
this.nestingLimit);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Text.Reader getText() {
|
public Text.Reader getText() {
|
||||||
return WireHelpers.readTextPointer(this.segment, this.pointer, null, 0, 0);
|
return WireHelpers.readTextPointer(this.segment, this.pointer, null, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.VOID);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.VOID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.BIT);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.BIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,7 +175,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.BYTE);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.BYTE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.TWO_BYTES);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.TWO_BYTES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,7 +323,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.FOUR_BYTES);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.FOUR_BYTES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -397,7 +397,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.FOUR_BYTES);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.FOUR_BYTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,7 +472,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.EIGHT_BYTES);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.EIGHT_BYTES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -545,7 +545,7 @@ public class PrimitiveList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.EIGHT_BYTES);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.EIGHT_BYTES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
public class StructBuilder {
|
public class StructBuilder {
|
||||||
|
|
||||||
public interface Factory<T> {
|
public interface Factory<T> {
|
||||||
T constructBuilder(SegmentBuilder segment, int data, int pointers, int dataSize,
|
T constructBuilder(SegmentBuilder segment, int data, int pointers, int dataSize,
|
||||||
short pointerCount, byte bit0Offset);
|
short pointerCount, byte bit0Offset);
|
||||||
StructSize structSize();
|
StructSize structSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,21 @@
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
public interface StructFactory<Builder, Reader> extends StructBuilder.Factory<Builder>, StructReader.Factory<Reader>{
|
public abstract class StructFactory<Builder, Reader> implements FromPointerBuilder<Builder>, StructBuilder.Factory<Builder>,
|
||||||
public Reader asReader(Builder builder);
|
InitFromPointerBuilder<Builder>,
|
||||||
|
FromPointerReader<Reader>, StructReader.Factory<Reader> {
|
||||||
|
public Builder fromPointerBuilder(PointerBuilder builder, SegmentReader defaultSegment, int defaultOffset) {
|
||||||
|
return WireHelpers.getWritableStructPointer(this, builder.pointer, builder.segment, this.structSize(),
|
||||||
|
defaultSegment, defaultOffset);
|
||||||
|
}
|
||||||
|
public Builder initFromPointerBuilder(PointerBuilder builder) {
|
||||||
|
return WireHelpers.initStructPointer(this, builder.pointer, builder.segment, this.structSize());
|
||||||
|
}
|
||||||
|
public Reader fromPointerReader(PointerReader reader, SegmentReader defaultSegment, int defaultOffset) {
|
||||||
|
return WireHelpers.readStructPointer(this,
|
||||||
|
reader.segment,
|
||||||
|
reader.pointer,
|
||||||
|
defaultSegment, defaultOffset,
|
||||||
|
reader.nestingLimit);
|
||||||
|
}
|
||||||
|
public abstract Reader asReader(Builder builder);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ public final class StructList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder<ElementBuilder> initFromPointerBuilder(PointerBuilder builder,
|
public final Builder<ElementBuilder> initSizedFromPointerBuilder(PointerBuilder builder,
|
||||||
int elementCount) {
|
int elementCount) {
|
||||||
return WireHelpers.initStructListPointer(this, builder.pointer, builder.segment, elementCount, factory.structSize());
|
return WireHelpers.initStructListPointer(this, builder.pointer, builder.segment, elementCount, factory.structSize());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
|
|
||||||
public class StructReader {
|
public class StructReader {
|
||||||
public interface Factory<T> {
|
public interface Factory<T> {
|
||||||
T constructReader(SegmentReader segment, int data, int pointers,
|
abstract T constructReader(SegmentReader segment, int data, int pointers,
|
||||||
int dataSize, short pointerCount,
|
int dataSize, short pointerCount,
|
||||||
byte bit0Offset, int nestingLimit);
|
byte bit0Offset, int nestingLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final SegmentReader segment;
|
protected final SegmentReader segment;
|
||||||
|
|
|
@ -36,7 +36,7 @@ public final class TextList {
|
||||||
defaultOffset);
|
defaultOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Builder initFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
public final Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.POINTER);
|
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, FieldSize.POINTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ class LayoutSuite extends FunSuite {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
test("SimpleRawDataStruct") {
|
test("SimpleRawDataStruct") {
|
||||||
val data : Array[Byte] =
|
val data : Array[Byte] =
|
||||||
Array(0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
Array(0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||||
|
@ -24,7 +23,10 @@ class LayoutSuite extends FunSuite {
|
||||||
|
|
||||||
val arena = new ReaderArena(Array(buffer));
|
val arena = new ReaderArena(Array(buffer));
|
||||||
val pointerReader = new PointerReader(arena.tryGetSegment(0), 0, 0x7fffffff);
|
val pointerReader = new PointerReader(arena.tryGetSegment(0), 0, 0x7fffffff);
|
||||||
val reader = pointerReader.getStruct(new BareStructReader());
|
|
||||||
|
val reader = WireHelpers.readStructPointer(new BareStructReader(),
|
||||||
|
pointerReader.segment,
|
||||||
|
pointerReader.pointer, null, 0, 0x7fffffff);
|
||||||
|
|
||||||
assert(reader._getLongField(0) === 0xefcdab8967452301L);
|
assert(reader._getLongField(0) === 0xefcdab8967452301L);
|
||||||
assert(reader._getLongField(1) === 0L);
|
assert(reader._getLongField(1) === 0L);
|
||||||
|
@ -117,9 +119,9 @@ class LayoutSuite extends FunSuite {
|
||||||
new SegmentBuilder(buffer, new BuilderArena(BuilderArena.SUGGESTED_FIRST_SEGMENT_WORDS,
|
new SegmentBuilder(buffer, new BuilderArena(BuilderArena.SUGGESTED_FIRST_SEGMENT_WORDS,
|
||||||
BuilderArena.SUGGESTED_ALLOCATION_STRATEGY)),
|
BuilderArena.SUGGESTED_ALLOCATION_STRATEGY)),
|
||||||
0);
|
0);
|
||||||
val builder = pointerBuilder.initStruct(new BareStructBuilder(new StructSize(2, 4, FieldSize.INLINE_COMPOSITE)));
|
val factory = new BareStructBuilder(new StructSize(2, 4, FieldSize.INLINE_COMPOSITE));
|
||||||
|
val builder = WireHelpers.initStructPointer(factory, pointerBuilder.pointer, pointerBuilder.segment, factory.structSize());
|
||||||
setupStruct(builder);
|
setupStruct(builder);
|
||||||
|
|
||||||
checkStruct(builder);
|
checkStruct(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue