diff --git a/compiler/src/test/scala/org/capnproto/TestUtil.scala b/compiler/src/test/scala/org/capnproto/TestUtil.scala index 48a31aa..712d036 100644 --- a/compiler/src/test/scala/org/capnproto/TestUtil.scala +++ b/compiler/src/test/scala/org/capnproto/TestUtil.scala @@ -162,7 +162,7 @@ object TestUtil { assert(textList.get(2).toString() == "thud"); val structList = builder.getStructList(); - //assert(3 == structList.size()); + assert(3 == structList.size()); //assert(structList.get(0).getTextField().toString() == "structlist 1") //assert(structList.get(1).getTextField().toString() == "structlist 2") //assert(structList.get(2).getTextField().toString() == "structlist 3") diff --git a/runtime/src/main/java/org/capnproto/Data.java b/runtime/src/main/java/org/capnproto/Data.java index 9dab3b0..0a0f516 100644 --- a/runtime/src/main/java/org/capnproto/Data.java +++ b/runtime/src/main/java/org/capnproto/Data.java @@ -66,6 +66,12 @@ public final class Data { public final int offset; // in bytes public final int size; // in bytes + public Reader() { + this.buffer = ByteBuffer.allocate(0); + this.offset = 0; + this.size = 0; + } + public Reader(ByteBuffer buffer, int offset, int size) { this.buffer = buffer; this.offset = offset * 8; @@ -104,6 +110,12 @@ public final class Data { public final int offset; // in bytes public final int size; // in bytes + public Builder() { + this.buffer = ByteBuffer.allocate(0); + this.offset = 0; + this.size = 0; + } + public Builder(ByteBuffer buffer, int offset, int size) { this.buffer = buffer; this.offset = offset; diff --git a/runtime/src/main/java/org/capnproto/Text.java b/runtime/src/main/java/org/capnproto/Text.java index fa67524..6d30b4d 100644 --- a/runtime/src/main/java/org/capnproto/Text.java +++ b/runtime/src/main/java/org/capnproto/Text.java @@ -70,6 +70,13 @@ public final class Text { public final int offset; // in bytes public final int size; // in bytes, not including NUL terminator + public Reader() { + // TODO what about the null terminator? + this.buffer = ByteBuffer.allocate(0); + this.offset = 0; + this.size = 0; + } + public Reader(ByteBuffer buffer, int offset, int size) { this.buffer = buffer; this.offset = offset * 8; @@ -121,6 +128,12 @@ public final class Text { public final int offset; // in bytes public final int size; // in bytes + public Builder() { + this.buffer = ByteBuffer.allocate(0); + this.offset = 0; + this.size = 0; + } + public Builder(ByteBuffer buffer, int offset, int size) { this.buffer = buffer; this.offset = offset; diff --git a/runtime/src/main/java/org/capnproto/WireHelpers.java b/runtime/src/main/java/org/capnproto/WireHelpers.java index 5ae5db2..40a2415 100644 --- a/runtime/src/main/java/org/capnproto/WireHelpers.java +++ b/runtime/src/main/java/org/capnproto/WireHelpers.java @@ -344,15 +344,17 @@ final class WireHelpers { throw new DecodeException("INLINE_COMPOSITE list with non-STRUCT elements not supported."); } int oldDataSize = StructPointer.dataSize(oldTag); - int oldPointerCount = StructPointer.ptrCount(oldTag); + short oldPointerCount = StructPointer.ptrCount(oldTag); int oldStep = (oldDataSize + oldPointerCount * Constants.POINTER_SIZE_IN_WORDS); int elementCount = WirePointer.inlineCompositeListElementCount(oldTag); if (oldDataSize >= elementSize.data && oldPointerCount >= elementSize.pointers) { //# Old size is at least as large as we need. Ship it. return factory.constructBuilder(resolved.segment, resolved.ptr * Constants.BYTES_PER_WORD, - elementCount, oldDataSize * Constants.BITS_PER_WORD, oldPointerCount, - ElementSize.INLINE_COMPOSITE); + elementCount, + oldStep * Constants.BITS_PER_WORD, + oldDataSize * Constants.BITS_PER_WORD, oldPointerCount); + //ElementSize.INLINE_COMPOSITE); } //# The structs in this list are smaller than expected, probably written using an older @@ -403,7 +405,7 @@ final class WireHelpers { if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { - return new Text.Builder(null, 0, 0); + return new Text.Builder(); } else { Text.Builder builder = initTextPointer(refOffset, segment, defaultSize); // TODO is there a way to do this with bulk methods? @@ -467,7 +469,7 @@ final class WireHelpers { if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { - return new Data.Builder(ByteBuffer.allocate(0), 0, 0); + return new Data.Builder(); } else { Data.Builder builder = initDataPointer(refOffset, segment, defaultSize); // TODO is there a way to do this with bulk methods? @@ -822,8 +824,7 @@ final class WireHelpers { if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { - // XXX -- what about null terminator? - return new Text.Reader(ByteBuffer.wrap(new byte[0]), 0, 0); + return new Text.Reader(); } else { return new Text.Reader(defaultBuffer, defaultOffset, defaultSize); } @@ -861,7 +862,7 @@ final class WireHelpers { if (WirePointer.isNull(ref)) { if (defaultBuffer == null) { - return new Data.Reader(ByteBuffer.wrap(new byte[0]), 0, 0); + return new Data.Reader(); } else { return new Data.Reader(defaultBuffer, defaultOffset, defaultSize); }