From 2ba6629c1b1610c072500c09fbf58b910c98b9ec Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sat, 17 May 2014 16:57:13 -0400 Subject: [PATCH] work on initTextPointer --- generator/src/main/java/org/capnproto/ListPointer.java | 7 +++++++ .../src/main/java/org/capnproto/StructPointer.java | 4 ++-- generator/src/main/java/org/capnproto/Text.java | 10 +++++++++- generator/src/main/java/org/capnproto/WireHelpers.java | 10 +++++++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/generator/src/main/java/org/capnproto/ListPointer.java b/generator/src/main/java/org/capnproto/ListPointer.java index 71fa58f..a260b57 100644 --- a/generator/src/main/java/org/capnproto/ListPointer.java +++ b/generator/src/main/java/org/capnproto/ListPointer.java @@ -15,7 +15,14 @@ final class ListPointer { return elementCount(elementSizeAndCount); } + public static void set(ByteBuffer buffer, int offset, byte elementSize, int elementCount) { + // TODO length assertion + buffer.putInt(8 * offset + 4, + (elementCount << 3) | elementSize); + } + public static void setInlineComposite(ByteBuffer buffer, int offset, int wordCount) { + // TODO length assertion buffer.putInt(8 * offset + 4, (wordCount << 3) | FieldSize.INLINE_COMPOSITE); } diff --git a/generator/src/main/java/org/capnproto/StructPointer.java b/generator/src/main/java/org/capnproto/StructPointer.java index b904d9d..4badcce 100644 --- a/generator/src/main/java/org/capnproto/StructPointer.java +++ b/generator/src/main/java/org/capnproto/StructPointer.java @@ -16,7 +16,7 @@ final class StructPointer{ } public static void setFromStructSize(ByteBuffer buffer, int offset, StructSize size) { -// buffer.putInt(8 * offset + 4, - throw new Error("unimplemented"); + buffer.putShort(8 * offset + 4, size.data); + buffer.putShort(8 * offset + 6, size.pointers); } } diff --git a/generator/src/main/java/org/capnproto/Text.java b/generator/src/main/java/org/capnproto/Text.java index 5bad020..16be7d1 100644 --- a/generator/src/main/java/org/capnproto/Text.java +++ b/generator/src/main/java/org/capnproto/Text.java @@ -4,7 +4,7 @@ import java.nio.ByteBuffer; public class Text { - public static class Reader { + public static final class Reader { public final ByteBuffer buffer; public final int offset; // in bytes public final int size; // in bytes @@ -42,4 +42,12 @@ public class Text { } + public static final class Builder { + public final ByteBuffer buffer; + + public Builder(ByteBuffer buffer) { + this.buffer = buffer; + } + } + } diff --git a/generator/src/main/java/org/capnproto/WireHelpers.java b/generator/src/main/java/org/capnproto/WireHelpers.java index 622bc95..a44c98c 100644 --- a/generator/src/main/java/org/capnproto/WireHelpers.java +++ b/generator/src/main/java/org/capnproto/WireHelpers.java @@ -52,8 +52,12 @@ final class WireHelpers { ListPointer.setInlineComposite(segment.buffer, refOffset, wordCount); WirePointer.setKindAndInlineCompositeListElementCount(segment.buffer, ptrOffset, WirePointer.STRUCT, elementCount); + StructPointer.setFromStructSize(segment.buffer, ptrOffset, elementSize); - throw new Error("unimplemented"); + ptrOffset += 1; + + return new ListBuilder(segment, ptrOffset, elementCount, wordsPerElement * 64, + elementSize.data * 64, elementSize.pointers); } // size is in bytes @@ -63,8 +67,12 @@ final class WireHelpers { //# The byte list must include a NUL terminator. int byteSize = size + 1; + //# Allocate the space. int ptrOffset = allocate(refOffset, segment, roundBytesUpToWords(byteSize), WirePointer.LIST); + //# Initialize the pointer. + ListPointer.set(segment.buffer, refOffset, FieldSize.BYTE, byteSize); + throw new Error("unimplemented"); }