init methods for generic fields

This commit is contained in:
David Renshaw 2014-10-28 12:51:01 -04:00
parent 77242cd15d
commit 4870faf255
14 changed files with 40 additions and 97 deletions

View file

@ -932,19 +932,20 @@ private:
spaces(indent), " }\n",
spaces(indent), " public ", typeParam.flatten(), "_Builder get", titleCase, "() {\n",
unionDiscrim.check,
unionDiscrim.check,
spaces(indent), " return _getPointerField(", typeParam.flatten(), "_Factory, ", offset, ");\n",
spaces(indent), " }\n",
spaces(indent), " }\n",
spaces(indent), " public org.capnproto.AnyPointer.Builder init", titleCase, "() {\n",
unionDiscrim.set,
spaces(indent), " org.capnproto.AnyPointer.Builder result =\n",
spaces(indent), " new org.capnproto.AnyPointer.Builder(this.segment, this.pointers +",
offset, ");\n",
spaces(indent), " result.clear();\n",
spaces(indent), " return result;\n",
spaces(indent), " }\n",
"\n"),
spaces(indent), " public ", typeParam.flatten(), "_Builder init", titleCase, "() {\n",
unionDiscrim.set,
spaces(indent), " return _initPointerField(", typeParam.flatten(), "_Factory, ", offset, ", 0);\n",
spaces(indent), " }\n",
spaces(indent), " public ", typeParam.flatten(), "_Builder init", titleCase, "(int size) {\n",
unionDiscrim.set,
spaces(indent), " return _initPointerField(", typeParam.flatten(), "_Factory, ", offset, ", size);\n",
spaces(indent), " }\n",
"\n"),
};
};
return FieldText {
@ -1016,7 +1017,7 @@ private:
spaces(indent), " public final ", type, ".Builder init", titleCase, "() {\n",
unionDiscrim.set,
spaces(indent), " return ",
"_initPointerField(", type, ".factory,", offset, ");\n",
"_initPointerField(", type, ".factory,", offset, ", 0);\n",
spaces(indent), " }\n"),
};
@ -1065,7 +1066,7 @@ private:
spaces(indent), " }\n",
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
spaces(indent), " return _initSizedPointerField(", factory, ", ", offset, ", size);\n",
spaces(indent), " return _initPointerField(", factory, ", ", offset, ", size);\n",
spaces(indent), " }\n"),
};
} else if (kind == FieldKind::LIST) {
@ -1108,7 +1109,7 @@ private:
spaces(indent), " public final ", builderClass,
" init", titleCase, "(int size) {\n",
spaces(indent), " return _initSizedPointerField(", listFactory, ", ", offset, ", size);\n",
spaces(indent), " return _initPointerField(", listFactory, ", ", offset, ", size);\n",
spaces(indent), " }\n"),
};
} else {

View file

@ -29,6 +29,11 @@ public final class AnyPointer {
public final Builder fromPointerBuilder(SegmentBuilder segment, int pointer) {
return new Builder(segment, pointer);
}
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) {
Builder result = new Builder(segment, pointer);
result.clear();
return result;
}
}
public final static class Reader {
@ -68,12 +73,12 @@ public final class AnyPointer {
return factory.fromPointerBuilder(this.segment, this.pointer);
}
public final <T> T initAs(InitFromPointerBuilder<T> factory) {
return factory.initFromPointerBuilder(this.segment, this.pointer);
public final <T> T initAs(FromPointerBuilder<T> factory) {
return factory.initFromPointerBuilder(this.segment, this.pointer, 0);
}
public final <T> T initAs(InitSizedFromPointerBuilder<T> factory, int elementCount) {
return factory.initSizedFromPointerBuilder(this.segment, this.pointer, elementCount);
public final <T> T initAs(FromPointerBuilder<T> factory, int elementCount) {
return factory.initFromPointerBuilder(this.segment, this.pointer, elementCount);
}
public final void clear() {

View file

@ -28,8 +28,7 @@ public final class Data {
FromPointerReader<Reader>,
FromPointerBuilderBlobDefault<Builder>,
FromPointerBuilder<Builder>,
SetPointerBuilder<Reader>,
InitSizedFromPointerBuilder<Builder> {
SetPointerBuilder<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);
@ -51,7 +50,7 @@ public final class Data {
null, 0, 0);
}
public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
return WireHelpers.initDataPointer(pointer, segment, size);
}

View file

@ -23,4 +23,5 @@ package org.capnproto;
public interface FromPointerBuilder<T> {
T fromPointerBuilder(SegmentBuilder segment, int pointer);
T initFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount);
}

View file

@ -1,26 +0,0 @@
// Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors
// Licensed under the MIT License:
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
package org.capnproto;
public interface InitFromPointerBuilder<T> {
T initFromPointerBuilder(SegmentBuilder segment, int pointer);
}

View file

@ -1,26 +0,0 @@
// Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors
// Licensed under the MIT License:
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
package org.capnproto;
public interface InitSizedFromPointerBuilder<T> {
T initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount);
}

View file

@ -131,14 +131,8 @@ public class ListBuilder {
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD);
}
protected final <T> T _initPointerElement(InitFromPointerBuilder<T> factory, int index) {
protected final <T> T _initPointerElement(FromPointerBuilder<T> factory, int index, int elementCount) {
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);

View file

@ -25,7 +25,6 @@ public abstract class ListFactory<Builder, Reader extends ListReader>
implements ListBuilder.Factory<Builder>,
FromPointerBuilder<Builder>,
FromPointerBuilderRefDefault<Builder>,
InitSizedFromPointerBuilder<Builder>,
SetPointerBuilder<Reader>,
ListReader.Factory<Reader>,
FromPointerReader<Reader>,
@ -68,7 +67,7 @@ public abstract class ListFactory<Builder, Reader extends ListReader>
null, 0);
}
public Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) {
public Builder initFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) {
return WireHelpers.initListPointer(this, pointer, segment, elementCount, this.elementSize);
}

View file

@ -79,7 +79,7 @@ public final class ListList {
}
public final T init(int index, int size) {
return _initSizedPointerElement(this.factory, index, size);
return _initPointerElement(this.factory, index, size);
}
public final T get(int index) {

View file

@ -44,7 +44,7 @@ public final class MessageBuilder {
throw new Error("unimplemented");
}
public <T> T initRoot(InitFromPointerBuilder<T> factory) {
public <T> T initRoot(FromPointerBuilder<T> factory) {
SegmentBuilder rootSegment = this.arena.segments.get(0);
int location = rootSegment.allocate(1);
if (location == SegmentBuilder.FAILED_ALLOCATION) {

View file

@ -190,12 +190,8 @@ public class StructBuilder {
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);
protected final <T> T _initPointerField(FromPointerBuilder<T> factory, int index, int elementCount) {
return factory.initFromPointerBuilder(this.segment, this.pointers + index, elementCount);
}
protected final <Reader> void _setPointerField(SetPointerBuilder<Reader> factory, int index, Reader value) {

View file

@ -25,7 +25,6 @@ public abstract class StructFactory<Builder, Reader extends StructReader>
implements FromPointerBuilder<Builder>,
FromPointerBuilderRefDefault<Builder>,
StructBuilder.Factory<Builder>,
InitFromPointerBuilder<Builder>,
SetPointerBuilder<Reader>,
FromPointerReader<Reader>,
FromPointerReaderRefDefault<Reader>,
@ -51,7 +50,7 @@ public abstract class StructFactory<Builder, Reader extends StructReader>
return WireHelpers.getWritableStructPointer(this, pointer, segment, this.structSize(),
null, 0);
}
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer) {
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) {
return WireHelpers.initStructPointer(this, pointer, segment, this.structSize());
}

View file

@ -58,6 +58,7 @@ public final class StructList {
defaultOffset);
}
@Override
public final Builder<ElementBuilder> fromPointerBuilder(SegmentBuilder segment, int pointer) {
return WireHelpers.getWritableStructListPointer(this,
pointer,
@ -66,8 +67,9 @@ public final class StructList {
null, 0);
}
public final Builder<ElementBuilder> initSizedFromPointerBuilder(SegmentBuilder segment, int pointer,
int elementCount) {
@Override
public final Builder<ElementBuilder> initFromPointerBuilder(SegmentBuilder segment, int pointer,
int elementCount) {
return WireHelpers.initStructListPointer(this, pointer, segment, elementCount, factory.structSize());
}
}

View file

@ -29,8 +29,7 @@ public final class Text {
FromPointerReader<Reader>,
FromPointerBuilderBlobDefault<Builder>,
FromPointerBuilder<Builder>,
SetPointerBuilder<Reader>,
InitSizedFromPointerBuilder<Builder> {
SetPointerBuilder<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);
@ -55,7 +54,7 @@ public final class Text {
null, 0, 0);
}
public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
return WireHelpers.initTextPointer(pointer, segment, size);
}