From 6d22ad85f8f0ff165cf28c57f0f85934ed617ef3 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sat, 10 May 2014 10:19:23 -0400 Subject: [PATCH] working on lists --- Makefile | 2 ++ src/capnp/ListReader.java | 24 ++++++++++++++++++++++++ src/capnp/StructList.java | 8 ++++++++ src/capnp/StructReader.java | 12 ++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 src/capnp/ListReader.java create mode 100644 src/capnp/StructList.java diff --git a/Makefile b/Makefile index c09bcbc..95f0094 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,11 @@ CXX=g++ -std=c++11 CAPNP_SOURCES=\ src/capnp/ListPointer.java\ + src/capnp/ListReader.java\ src/capnp/PointerReader.java\ src/capnp/SegmentReader.java\ src/capnp/StructReader.java\ + src/capnp/StructList.java\ src/capnp/Text.java\ src/capnp/WireHelpers.java\ src/capnp/WirePointer.java\ diff --git a/src/capnp/ListReader.java b/src/capnp/ListReader.java new file mode 100644 index 0000000..73fe4b4 --- /dev/null +++ b/src/capnp/ListReader.java @@ -0,0 +1,24 @@ +package capnp; + +public class ListReader { + SegmentReader segment; + int ptr; // byte offset to front of list + int elementCount; + int step; + int structDataSize; // in bits + short structPointerCount; + int nestingLimit; + + + public StructReader getStructElement(int index) { + // TODO check nesting limit + + int indexBit = index * this.step; + + int structData = this.ptr + (indexBit / 8); + int structPointers = structData + (this.structDataSize / 8); + + return new StructReader(this.segment, structData, structPointers, this.structDataSize, + this.structPointerCount, (byte)(indexBit % 8), this.nestingLimit - 1); + } +} diff --git a/src/capnp/StructList.java b/src/capnp/StructList.java new file mode 100644 index 0000000..56de86e --- /dev/null +++ b/src/capnp/StructList.java @@ -0,0 +1,8 @@ +package capnp; + + +public class StructList { + public static class Reader { + public ListReader reader; + } +} diff --git a/src/capnp/StructReader.java b/src/capnp/StructReader.java index ea2488b..e294065 100644 --- a/src/capnp/StructReader.java +++ b/src/capnp/StructReader.java @@ -11,6 +11,18 @@ public class StructReader { public int nestingLimit; + public StructReader(SegmentReader segment, int data, + int pointers, int dataSize, short pointerCount, + byte bit0Offset, int nestingLimit) { + this.segment = segment; + this.data = data; + this.pointers = pointers; + this.dataSize = dataSize; + this.pointerCount = pointerCount; + this.bit0Offset = bit0Offset; + this.nestingLimit = nestingLimit; + } + public boolean getBoolField(int offset) { // XXX should use unsigned operations if (offset < this.dataSize) {