From 4870faf255924ba8fbe4151d8fda3dcdb5e68184 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Tue, 28 Oct 2014 12:51:01 -0400 Subject: [PATCH] init methods for generic fields --- compiler/src/main/cpp/capnpc-java.c++ | 29 ++++++++++--------- .../main/java/org/capnproto/AnyPointer.java | 13 ++++++--- runtime/src/main/java/org/capnproto/Data.java | 5 ++-- .../org/capnproto/FromPointerBuilder.java | 1 + .../org/capnproto/InitFromPointerBuilder.java | 26 ----------------- .../InitSizedFromPointerBuilder.java | 26 ----------------- .../main/java/org/capnproto/ListBuilder.java | 8 +---- .../main/java/org/capnproto/ListFactory.java | 3 +- .../src/main/java/org/capnproto/ListList.java | 2 +- .../java/org/capnproto/MessageBuilder.java | 2 +- .../java/org/capnproto/StructBuilder.java | 8 ++--- .../java/org/capnproto/StructFactory.java | 3 +- .../main/java/org/capnproto/StructList.java | 6 ++-- runtime/src/main/java/org/capnproto/Text.java | 5 ++-- 14 files changed, 40 insertions(+), 97 deletions(-) delete mode 100644 runtime/src/main/java/org/capnproto/InitFromPointerBuilder.java delete mode 100644 runtime/src/main/java/org/capnproto/InitSizedFromPointerBuilder.java diff --git a/compiler/src/main/cpp/capnpc-java.c++ b/compiler/src/main/cpp/capnpc-java.c++ index c59e7b9..f24a21c 100644 --- a/compiler/src/main/cpp/capnpc-java.c++ +++ b/compiler/src/main/cpp/capnpc-java.c++ @@ -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 { diff --git a/runtime/src/main/java/org/capnproto/AnyPointer.java b/runtime/src/main/java/org/capnproto/AnyPointer.java index 1573f0d..2efb1c2 100644 --- a/runtime/src/main/java/org/capnproto/AnyPointer.java +++ b/runtime/src/main/java/org/capnproto/AnyPointer.java @@ -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 initAs(InitFromPointerBuilder factory) { - return factory.initFromPointerBuilder(this.segment, this.pointer); + public final T initAs(FromPointerBuilder factory) { + return factory.initFromPointerBuilder(this.segment, this.pointer, 0); } - public final T initAs(InitSizedFromPointerBuilder factory, int elementCount) { - return factory.initSizedFromPointerBuilder(this.segment, this.pointer, elementCount); + public final T initAs(FromPointerBuilder factory, int elementCount) { + return factory.initFromPointerBuilder(this.segment, this.pointer, elementCount); } public final void clear() { diff --git a/runtime/src/main/java/org/capnproto/Data.java b/runtime/src/main/java/org/capnproto/Data.java index 0a0f516..fd0b5e2 100644 --- a/runtime/src/main/java/org/capnproto/Data.java +++ b/runtime/src/main/java/org/capnproto/Data.java @@ -28,8 +28,7 @@ public final class Data { FromPointerReader, FromPointerBuilderBlobDefault, FromPointerBuilder, - SetPointerBuilder, - InitSizedFromPointerBuilder { + SetPointerBuilder { 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); } diff --git a/runtime/src/main/java/org/capnproto/FromPointerBuilder.java b/runtime/src/main/java/org/capnproto/FromPointerBuilder.java index 5759f37..9fa715b 100644 --- a/runtime/src/main/java/org/capnproto/FromPointerBuilder.java +++ b/runtime/src/main/java/org/capnproto/FromPointerBuilder.java @@ -23,4 +23,5 @@ package org.capnproto; public interface FromPointerBuilder { T fromPointerBuilder(SegmentBuilder segment, int pointer); + T initFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount); } diff --git a/runtime/src/main/java/org/capnproto/InitFromPointerBuilder.java b/runtime/src/main/java/org/capnproto/InitFromPointerBuilder.java deleted file mode 100644 index b3c02f6..0000000 --- a/runtime/src/main/java/org/capnproto/InitFromPointerBuilder.java +++ /dev/null @@ -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 initFromPointerBuilder(SegmentBuilder segment, int pointer); -} diff --git a/runtime/src/main/java/org/capnproto/InitSizedFromPointerBuilder.java b/runtime/src/main/java/org/capnproto/InitSizedFromPointerBuilder.java deleted file mode 100644 index 6a21c4f..0000000 --- a/runtime/src/main/java/org/capnproto/InitSizedFromPointerBuilder.java +++ /dev/null @@ -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 initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount); -} diff --git a/runtime/src/main/java/org/capnproto/ListBuilder.java b/runtime/src/main/java/org/capnproto/ListBuilder.java index 085c406..8fb3fbe 100644 --- a/runtime/src/main/java/org/capnproto/ListBuilder.java +++ b/runtime/src/main/java/org/capnproto/ListBuilder.java @@ -131,14 +131,8 @@ public class ListBuilder { (this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD); } - protected final T _initPointerElement(InitFromPointerBuilder factory, int index) { + protected final T _initPointerElement(FromPointerBuilder 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 _initSizedPointerElement(InitSizedFromPointerBuilder factory, int index, int elementCount) { - return factory.initSizedFromPointerBuilder( this.segment, (this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD, elementCount); diff --git a/runtime/src/main/java/org/capnproto/ListFactory.java b/runtime/src/main/java/org/capnproto/ListFactory.java index 6597eeb..40c9a9c 100644 --- a/runtime/src/main/java/org/capnproto/ListFactory.java +++ b/runtime/src/main/java/org/capnproto/ListFactory.java @@ -25,7 +25,6 @@ public abstract class ListFactory implements ListBuilder.Factory, FromPointerBuilder, FromPointerBuilderRefDefault, - InitSizedFromPointerBuilder, SetPointerBuilder, ListReader.Factory, FromPointerReader, @@ -68,7 +67,7 @@ public abstract class ListFactory 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); } diff --git a/runtime/src/main/java/org/capnproto/ListList.java b/runtime/src/main/java/org/capnproto/ListList.java index 53a2b5f..438183d 100644 --- a/runtime/src/main/java/org/capnproto/ListList.java +++ b/runtime/src/main/java/org/capnproto/ListList.java @@ -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) { diff --git a/runtime/src/main/java/org/capnproto/MessageBuilder.java b/runtime/src/main/java/org/capnproto/MessageBuilder.java index 7df0309..6983bf9 100644 --- a/runtime/src/main/java/org/capnproto/MessageBuilder.java +++ b/runtime/src/main/java/org/capnproto/MessageBuilder.java @@ -44,7 +44,7 @@ public final class MessageBuilder { throw new Error("unimplemented"); } - public T initRoot(InitFromPointerBuilder factory) { + public T initRoot(FromPointerBuilder factory) { SegmentBuilder rootSegment = this.arena.segments.get(0); int location = rootSegment.allocate(1); if (location == SegmentBuilder.FAILED_ALLOCATION) { diff --git a/runtime/src/main/java/org/capnproto/StructBuilder.java b/runtime/src/main/java/org/capnproto/StructBuilder.java index 9213c88..7cdb934 100644 --- a/runtime/src/main/java/org/capnproto/StructBuilder.java +++ b/runtime/src/main/java/org/capnproto/StructBuilder.java @@ -190,12 +190,8 @@ public class StructBuilder { return factory.fromPointerBuilderBlobDefault(this.segment, this.pointers + index, defaultBuffer, defaultOffset, defaultSize); } - protected final T _initPointerField(InitFromPointerBuilder factory, int index) { - return factory.initFromPointerBuilder(this.segment, this.pointers + index); - } - - protected final T _initSizedPointerField(InitSizedFromPointerBuilder factory, int index, int elementCount) { - return factory.initSizedFromPointerBuilder(this.segment, this.pointers + index, elementCount); + protected final T _initPointerField(FromPointerBuilder factory, int index, int elementCount) { + return factory.initFromPointerBuilder(this.segment, this.pointers + index, elementCount); } protected final void _setPointerField(SetPointerBuilder factory, int index, Reader value) { diff --git a/runtime/src/main/java/org/capnproto/StructFactory.java b/runtime/src/main/java/org/capnproto/StructFactory.java index dbfc970..d1bfea9 100644 --- a/runtime/src/main/java/org/capnproto/StructFactory.java +++ b/runtime/src/main/java/org/capnproto/StructFactory.java @@ -25,7 +25,6 @@ public abstract class StructFactory implements FromPointerBuilder, FromPointerBuilderRefDefault, StructBuilder.Factory, - InitFromPointerBuilder, SetPointerBuilder, FromPointerReader, FromPointerReaderRefDefault, @@ -51,7 +50,7 @@ public abstract class StructFactory 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()); } diff --git a/runtime/src/main/java/org/capnproto/StructList.java b/runtime/src/main/java/org/capnproto/StructList.java index 4bcac43..4064478 100644 --- a/runtime/src/main/java/org/capnproto/StructList.java +++ b/runtime/src/main/java/org/capnproto/StructList.java @@ -58,6 +58,7 @@ public final class StructList { defaultOffset); } + @Override public final Builder fromPointerBuilder(SegmentBuilder segment, int pointer) { return WireHelpers.getWritableStructListPointer(this, pointer, @@ -66,8 +67,9 @@ public final class StructList { null, 0); } - public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, - int elementCount) { + @Override + public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer, + int elementCount) { return WireHelpers.initStructListPointer(this, pointer, segment, elementCount, factory.structSize()); } } diff --git a/runtime/src/main/java/org/capnproto/Text.java b/runtime/src/main/java/org/capnproto/Text.java index 6d30b4d..bc4cf6b 100644 --- a/runtime/src/main/java/org/capnproto/Text.java +++ b/runtime/src/main/java/org/capnproto/Text.java @@ -29,8 +29,7 @@ public final class Text { FromPointerReader, FromPointerBuilderBlobDefault, FromPointerBuilder, - SetPointerBuilder, - InitSizedFromPointerBuilder { + SetPointerBuilder { 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); }