From d87672e8dc0f3b00dedc019f20b57daae81dba1e Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sat, 17 May 2014 16:04:51 -0400 Subject: [PATCH] working on initStructListPointer --- generator/src/main/java/org/capnproto/ListPointer.java | 5 +++++ generator/src/main/java/org/capnproto/StructPointer.java | 5 +++++ generator/src/main/java/org/capnproto/WireHelpers.java | 9 +++++++++ generator/src/main/java/org/capnproto/WirePointer.java | 7 +++++++ 4 files changed, 26 insertions(+) diff --git a/generator/src/main/java/org/capnproto/ListPointer.java b/generator/src/main/java/org/capnproto/ListPointer.java index faafa97..71fa58f 100644 --- a/generator/src/main/java/org/capnproto/ListPointer.java +++ b/generator/src/main/java/org/capnproto/ListPointer.java @@ -14,4 +14,9 @@ final class ListPointer { public static int inlineCompositeWordCount(int elementSizeAndCount) { return elementCount(elementSizeAndCount); } + + public static void setInlineComposite(ByteBuffer buffer, int offset, int wordCount) { + 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 656d696..b904d9d 100644 --- a/generator/src/main/java/org/capnproto/StructPointer.java +++ b/generator/src/main/java/org/capnproto/StructPointer.java @@ -14,4 +14,9 @@ final class StructPointer{ public static int wordSize(int structRef) { return (int)dataSize(structRef) + (int)ptrCount(structRef); } + + public static void setFromStructSize(ByteBuffer buffer, int offset, StructSize size) { +// buffer.putInt(8 * offset + 4, + throw new Error("unimplemented"); + } } diff --git a/generator/src/main/java/org/capnproto/WireHelpers.java b/generator/src/main/java/org/capnproto/WireHelpers.java index 8314dc7..622bc95 100644 --- a/generator/src/main/java/org/capnproto/WireHelpers.java +++ b/generator/src/main/java/org/capnproto/WireHelpers.java @@ -44,6 +44,15 @@ final class WireHelpers { int wordsPerElement = elementSize.total(); + //# Allocate the list, prefixed by a single WirePointer. + int wordCount = elementCount * wordsPerElement; + int ptrOffset = allocate(refOffset, segment, 1 + wordCount, WirePointer.LIST); + + //# Initialize the pointer. + ListPointer.setInlineComposite(segment.buffer, refOffset, wordCount); + WirePointer.setKindAndInlineCompositeListElementCount(segment.buffer, ptrOffset, + WirePointer.STRUCT, elementCount); + throw new Error("unimplemented"); } diff --git a/generator/src/main/java/org/capnproto/WirePointer.java b/generator/src/main/java/org/capnproto/WirePointer.java index 9c90f94..07ff585 100644 --- a/generator/src/main/java/org/capnproto/WirePointer.java +++ b/generator/src/main/java/org/capnproto/WirePointer.java @@ -33,6 +33,13 @@ final class WirePointer { return offsetAndKind(wirePointer) >> 2; } + public static void setKindAndInlineCompositeListElementCount(ByteBuffer buffer, + int offset, + byte kind, + int elementCount) { + buffer.putInt(offset * 8, (elementCount << 2) | kind); + } + public static int upper32Bits(long wirePointer) { return (int)(wirePointer >> 32); }