Text.factory, Data.factory
This commit is contained in:
parent
dce3c46cf1
commit
1cef64e2da
20 changed files with 149 additions and 81 deletions
|
@ -998,19 +998,20 @@ private:
|
|||
spaces(indent), " }\n",
|
||||
spaces(indent), " public final ", type, ".Builder init", titleCase, "() {\n",
|
||||
unionDiscrim.set,
|
||||
spaces(indent), " return ", type, ".factory.initFromPointerBuilder(",
|
||||
"_getPointerField(", offset, "));\n",
|
||||
spaces(indent), " return ",
|
||||
"_initPointerField(", type, ".factory,", offset, ");\n",
|
||||
spaces(indent), " }\n"),
|
||||
};
|
||||
|
||||
} else if (kind == FieldKind::BLOB) {
|
||||
|
||||
uint64_t typeId = field.getContainingStruct().getProto().getId();
|
||||
kj::String defaultParams = defaultOffset == 0 ? kj::str() : kj::str(
|
||||
kj::String defaultParams = defaultOffset == 0 ? kj::str("null, 0, 0") : kj::str(
|
||||
"Schemas.b_", kj::hex(typeId), ".buffer, ", defaultOffset, ", ", defaultSize);
|
||||
|
||||
kj::String blobKind = typeBody.which() == schema::Type::TEXT ? kj::str("Text") : kj::str("Data");
|
||||
kj::String setterInputType = typeBody.which() == schema::Type::TEXT ? kj::str("String") : kj::str("byte []");
|
||||
kj::String factory = kj::str("org.capnproto.", kj::str(blobKind), ".factory");
|
||||
|
||||
return FieldText {
|
||||
kj::strTree(
|
||||
|
@ -1022,8 +1023,8 @@ private:
|
|||
|
||||
spaces(indent), " public ", type, ".Reader",
|
||||
" get", titleCase, "() {\n",
|
||||
spaces(indent), " return _getPointerField(",
|
||||
offset, ").get", blobKind, "(", defaultParams, ");\n",
|
||||
spaces(indent), " return _getPointerField(", factory, ", ",
|
||||
offset, ", ", defaultParams, ");\n",
|
||||
spaces(indent), " }\n", "\n"),
|
||||
|
||||
kj::strTree(
|
||||
|
@ -1033,8 +1034,8 @@ private:
|
|||
spaces(indent), " return !_getPointerField(", offset, ").isNull();\n",
|
||||
spaces(indent), " }\n",
|
||||
spaces(indent), " public final ", type, ".Builder get", titleCase, "() {\n",
|
||||
spaces(indent), " return _getPointerField(",
|
||||
offset, ").get", blobKind, "(", defaultParams, ");\n",
|
||||
spaces(indent), " return _getPointerField(", factory, ", ",
|
||||
offset, ", ", defaultParams, ");\n",
|
||||
spaces(indent), " }\n",
|
||||
spaces(indent), " public final void set", titleCase, "(", type, ".Reader value) {\n",
|
||||
unionDiscrim.set,
|
||||
|
@ -1047,7 +1048,7 @@ private:
|
|||
spaces(indent), " }\n",
|
||||
|
||||
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
|
||||
spaces(indent), " return _getPointerField(", offset, ").init", blobKind, "(size);\n",
|
||||
spaces(indent), " return _initSizedPointerField(", factory, ", ", offset, ", size);\n",
|
||||
spaces(indent), " }\n"),
|
||||
};
|
||||
} else if (kind == FieldKind::LIST) {
|
||||
|
@ -1090,7 +1091,7 @@ private:
|
|||
|
||||
spaces(indent), " public final ", builderClass,
|
||||
" init", titleCase, "(int size) {\n",
|
||||
spaces(indent), " return (", listFactory, ").initSizedFromPointerBuilder(_getPointerField(", offset, "), size);\n",
|
||||
spaces(indent), " return _initSizedPointerField(", listFactory, ", ", offset, ", size);\n",
|
||||
spaces(indent), " }\n"),
|
||||
};
|
||||
} else {
|
||||
|
|
|
@ -22,11 +22,11 @@ public final class AnyPointer {
|
|||
}
|
||||
|
||||
public final <T> T initAs(InitFromPointerBuilder<T> factory) {
|
||||
return factory.initFromPointerBuilder(this.builder);
|
||||
return factory.initFromPointerBuilder(this.builder.segment, this.builder.pointer);
|
||||
}
|
||||
|
||||
public final <T> T initAs(InitSizedFromPointerBuilder<T> factory, int elementCount) {
|
||||
return factory.initSizedFromPointerBuilder(this.builder, elementCount);
|
||||
return factory.initSizedFromPointerBuilder(this.builder.segment, this.builder.pointer, elementCount);
|
||||
}
|
||||
|
||||
public final void clear() {
|
||||
|
|
|
@ -3,6 +3,27 @@ package org.capnproto;
|
|||
import java.nio.ByteBuffer;
|
||||
|
||||
public final class Data {
|
||||
public static final class Factory implements FromPointerReaderBlobDefault<Reader>,
|
||||
FromPointerBuilderBlobDefault<Builder>,
|
||||
InitSizedFromPointerBuilder<Builder> {
|
||||
public Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
||||
int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.readDataPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
|
||||
}
|
||||
public Builder fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.getWritableDataPointer(pointer,
|
||||
segment,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
}
|
||||
|
||||
public Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
|
||||
return WireHelpers.initDataPointer(pointer, segment, size);
|
||||
}
|
||||
}
|
||||
public static final Factory factory = new Factory();
|
||||
|
||||
public static final class Reader {
|
||||
public final ByteBuffer buffer;
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class DataList {
|
|||
}
|
||||
|
||||
public Data.Reader get(int index) {
|
||||
return _getPointerElement(index).getData();
|
||||
return _getPointerElement(Data.factory, index, null, 0, 0);
|
||||
}
|
||||
|
||||
public final class Iterator implements java.util.Iterator<Data.Reader> {
|
||||
|
@ -41,7 +41,7 @@ public final class DataList {
|
|||
}
|
||||
|
||||
public Data.Reader next() {
|
||||
return this.list._getPointerElement(idx++).getData();
|
||||
return _getPointerElement(Data.factory, idx++, null, 0, 0);
|
||||
}
|
||||
public boolean hasNext() {
|
||||
return idx < list.size();
|
||||
|
@ -65,7 +65,7 @@ public final class DataList {
|
|||
}
|
||||
|
||||
public final Data.Builder get(int index) {
|
||||
return _getPointerElement(index).getData();
|
||||
return _getPointerElement(Data.factory, index, null, 0, 0);
|
||||
}
|
||||
|
||||
public final void set(int index, Data.Reader value) {
|
||||
|
@ -80,7 +80,7 @@ public final class DataList {
|
|||
}
|
||||
|
||||
public Data.Builder next() {
|
||||
return this.list._getPointerElement(idx++).getData();
|
||||
return this.list._getPointerElement(Data.factory, idx++, null, 0, 0);
|
||||
}
|
||||
public boolean hasNext() {
|
||||
return this.idx < this.list.size();
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface FromPointerBuilderBlobDefault<T> {
|
||||
T fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize);
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface FromPointerReaderBlobDefault<T> {
|
||||
T fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
||||
int defaultOffset, int defaultSize);
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface InitFromPointerBuilder<T> {
|
||||
T initFromPointerBuilder(PointerBuilder builder);
|
||||
T initFromPointerBuilder(SegmentBuilder segment, int pointer);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface InitSizedFromPointerBuilder<T> {
|
||||
T initSizedFromPointerBuilder(PointerBuilder builder, int elementCount);
|
||||
T initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount);
|
||||
}
|
||||
|
|
|
@ -117,4 +117,26 @@ public class ListBuilder {
|
|||
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
|
||||
defaultSegment, defaultOffset);
|
||||
}
|
||||
|
||||
protected final <T> T _getPointerElement(FromPointerBuilderBlobDefault<T> factory, int index,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return factory.fromPointerBuilderBlobDefault(
|
||||
this.segment,
|
||||
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
|
||||
defaultBuffer, defaultOffset, defaultSize);
|
||||
}
|
||||
|
||||
|
||||
protected final <T> T _initPointerElement(InitFromPointerBuilder<T> factory, int index) {
|
||||
return factory.initFromPointerBuilder(
|
||||
this.segment,
|
||||
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD);
|
||||
}
|
||||
|
||||
protected final <T> T _initSizedPointerElement(InitSizedFromPointerBuilder<T> factory, int index, int elementCount) {
|
||||
return factory.initSizedFromPointerBuilder(
|
||||
this.segment,
|
||||
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
|
||||
elementCount);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public abstract class ListFactory<Builder, Reader> implements ListBuilder.Factor
|
|||
defaultOffset);
|
||||
}
|
||||
|
||||
public Builder initSizedFromPointerBuilder(PointerBuilder builder, int elementCount) {
|
||||
return WireHelpers.initListPointer(this, builder.pointer, builder.segment, elementCount, this.elementSize);
|
||||
public Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) {
|
||||
return WireHelpers.initListPointer(this, pointer, segment, elementCount, this.elementSize);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ public final class ListList {
|
|||
}
|
||||
|
||||
public final T init(int index, int size) {
|
||||
return this.factory.initSizedFromPointerBuilder(_getPointerElement(index), size);
|
||||
return _initSizedPointerElement(this.factory, index, size);
|
||||
}
|
||||
|
||||
public final T get(int index) {
|
||||
|
|
|
@ -99,4 +99,15 @@ public class ListReader {
|
|||
defaultOffset,
|
||||
this.nestingLimit);
|
||||
}
|
||||
|
||||
protected <T> T _getPointerElement(FromPointerReaderBlobDefault<T> factory, int index,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return factory.fromPointerReaderBlobDefault(
|
||||
this.segment,
|
||||
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -17,42 +17,6 @@ public final class PointerBuilder {
|
|||
return this.segment.buffer.getLong(this.pointer) == 0;
|
||||
}
|
||||
|
||||
|
||||
public final Text.Builder getText() {
|
||||
return WireHelpers.getWritableTextPointer(
|
||||
this.pointer, this.segment, null, 0, 0);
|
||||
}
|
||||
|
||||
public Text.Builder getText(java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.getWritableTextPointer(this.pointer,
|
||||
this.segment,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
}
|
||||
|
||||
public final Data.Builder getData() {
|
||||
return WireHelpers.getWritableDataPointer(this.pointer,
|
||||
this.segment,
|
||||
null, 0, 0);
|
||||
}
|
||||
|
||||
public Data.Builder getData(java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.getWritableDataPointer(this.pointer,
|
||||
this.segment,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
}
|
||||
|
||||
public final Text.Builder initText(int size) {
|
||||
return WireHelpers.initTextPointer(this.pointer, this.segment, size);
|
||||
}
|
||||
|
||||
public final Data.Builder initData(int size) {
|
||||
return WireHelpers.initDataPointer(this.pointer, this.segment, size);
|
||||
}
|
||||
|
||||
public final void setList(ListReader value) {
|
||||
WireHelpers.setListPointer(this.segment, this.pointer, value);
|
||||
}
|
||||
|
|
|
@ -27,20 +27,4 @@ public final class PointerReader {
|
|||
public boolean isNull() {
|
||||
return this.segment.buffer.getLong(this.pointer) == 0;
|
||||
}
|
||||
|
||||
public Text.Reader getText() {
|
||||
return WireHelpers.readTextPointer(this.segment, this.pointer, null, 0, 0);
|
||||
}
|
||||
|
||||
public Text.Reader getText(java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.readTextPointer(this.segment, this.pointer, defaultBuffer, defaultOffset, defaultSize);
|
||||
}
|
||||
|
||||
public Data.Reader getData() {
|
||||
return WireHelpers.readDataPointer(this.segment, this.pointer, null, 0, 0);
|
||||
}
|
||||
|
||||
public Data.Reader getData(java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.readDataPointer(this.segment, this.pointer, defaultBuffer, defaultOffset, defaultSize);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -157,4 +157,17 @@ public class StructBuilder {
|
|||
return factory.fromPointerBuilder(this.segment, this.pointers + index, defaultSegment, defaultOffset);
|
||||
}
|
||||
|
||||
protected final <T> T _getPointerField(FromPointerBuilderBlobDefault<T> factory, int index,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return factory.fromPointerBuilderBlobDefault(this.segment, this.pointers + index, defaultBuffer, defaultOffset, defaultSize);
|
||||
}
|
||||
|
||||
protected final <T> T _initPointerField(InitFromPointerBuilder<T> factory, int index) {
|
||||
return factory.initFromPointerBuilder(this.segment, this.pointers + index);
|
||||
}
|
||||
|
||||
protected final <T> T _initSizedPointerField(InitSizedFromPointerBuilder<T> factory, int index, int elementCount) {
|
||||
return factory.initSizedFromPointerBuilder(this.segment, this.pointers + index, elementCount);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ public abstract class StructFactory<Builder, Reader> implements FromPointerBuild
|
|||
return WireHelpers.getWritableStructPointer(this, pointer, segment, this.structSize(),
|
||||
defaultSegment, defaultOffset);
|
||||
}
|
||||
public final Builder initFromPointerBuilder(PointerBuilder builder) {
|
||||
return WireHelpers.initStructPointer(this, builder.pointer, builder.segment, this.structSize());
|
||||
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer) {
|
||||
return WireHelpers.initStructPointer(this, pointer, segment, this.structSize());
|
||||
}
|
||||
|
||||
public abstract Reader asReader(Builder builder);
|
||||
|
|
|
@ -37,9 +37,9 @@ public final class StructList {
|
|||
defaultOffset);
|
||||
}
|
||||
|
||||
public final Builder<ElementBuilder> initSizedFromPointerBuilder(PointerBuilder builder,
|
||||
public final Builder<ElementBuilder> initSizedFromPointerBuilder(SegmentBuilder segment, int pointer,
|
||||
int elementCount) {
|
||||
return WireHelpers.initStructListPointer(this, builder.pointer, builder.segment, elementCount, factory.structSize());
|
||||
return WireHelpers.initStructListPointer(this, pointer, segment, elementCount, factory.structSize());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -160,4 +160,22 @@ public class StructReader {
|
|||
this.nestingLimit);
|
||||
}
|
||||
}
|
||||
|
||||
protected final <T> T _getPointerField(FromPointerReaderBlobDefault<T> factory, int ptrIndex,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
if (ptrIndex < this.pointerCount) {
|
||||
return factory.fromPointerReaderBlobDefault(this.segment,
|
||||
this.pointers + ptrIndex,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
} else {
|
||||
return factory.fromPointerReaderBlobDefault(SegmentReader.EMPTY,
|
||||
0,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,28 @@ package org.capnproto;
|
|||
import java.nio.ByteBuffer;
|
||||
|
||||
public final class Text {
|
||||
public static final class Factory implements FromPointerReaderBlobDefault<Reader>,
|
||||
FromPointerBuilderBlobDefault<Builder>,
|
||||
InitSizedFromPointerBuilder<Builder> {
|
||||
public Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
|
||||
int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.readTextPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
|
||||
}
|
||||
|
||||
public Builder fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer,
|
||||
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
|
||||
return WireHelpers.getWritableTextPointer(pointer,
|
||||
segment,
|
||||
defaultBuffer,
|
||||
defaultOffset,
|
||||
defaultSize);
|
||||
}
|
||||
|
||||
public Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
|
||||
return WireHelpers.initTextPointer(pointer, segment, size);
|
||||
}
|
||||
}
|
||||
public static final Factory factory = new Factory();
|
||||
|
||||
public static final class Reader {
|
||||
public final ByteBuffer buffer;
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class TextList {
|
|||
}
|
||||
|
||||
public Text.Reader get(int index) {
|
||||
return _getPointerElement(index).getText();
|
||||
return _getPointerElement(Text.factory, index, null, 0, 0);
|
||||
}
|
||||
|
||||
public final class Iterator implements java.util.Iterator<Text.Reader> {
|
||||
|
@ -41,7 +41,7 @@ public final class TextList {
|
|||
}
|
||||
|
||||
public Text.Reader next() {
|
||||
return this.list._getPointerElement(idx++).getText();
|
||||
return _getPointerElement(Text.factory, idx++, null, 0, 0);
|
||||
}
|
||||
public boolean hasNext() {
|
||||
return idx < list.size();
|
||||
|
@ -65,7 +65,7 @@ public final class TextList {
|
|||
}
|
||||
|
||||
public final Text.Builder get(int index) {
|
||||
return _getPointerElement(index).getText();
|
||||
return _getPointerElement(Text.factory, index, null, 0, 0);
|
||||
}
|
||||
|
||||
public final void set(int index, Text.Reader value) {
|
||||
|
@ -80,7 +80,7 @@ public final class TextList {
|
|||
}
|
||||
|
||||
public Text.Builder next() {
|
||||
return this.list._getPointerElement(idx++).getText();
|
||||
return this.list._getPointerElement(Text.factory, idx++, null, 0, 0);
|
||||
}
|
||||
public boolean hasNext() {
|
||||
return this.idx < this.list.size();
|
||||
|
|
Loading…
Reference in a new issue