add some more builder classes; rename ptr -> buffer

This commit is contained in:
David Renshaw 2014-05-12 18:11:19 -04:00
parent c4b6bad176
commit 91f34c7d28
8 changed files with 43 additions and 24 deletions

View file

@ -3,11 +3,13 @@ CXX=g++ -std=c++11
CAPNP_SOURCES=\ CAPNP_SOURCES=\
src/capnp/AnyPointer.java\ src/capnp/AnyPointer.java\
src/capnp/FieldSize.java\ src/capnp/FieldSize.java\
src/capnp/FromStructBuilder.java\
src/capnp/FromStructReader.java\ src/capnp/FromStructReader.java\
src/capnp/InputStreamMessageReader.java\ src/capnp/InputStreamMessageReader.java\
src/capnp/ListPointer.java\ src/capnp/ListPointer.java\
src/capnp/ListBuilder.java\ src/capnp/ListBuilder.java\
src/capnp/ListReader.java\ src/capnp/ListReader.java\
src/capnp/MessageBuilder.java\
src/capnp/MessageReader.java\ src/capnp/MessageReader.java\
src/capnp/PointerBuilder.java\ src/capnp/PointerBuilder.java\
src/capnp/PointerReader.java\ src/capnp/PointerReader.java\

View file

@ -0,0 +1,5 @@
package org.capnproto;
public interface FromStructBuilder<T> {
public abstract T fromStructBuilder(StructBuilder builder);
}

View file

@ -0,0 +1,5 @@
package org.capnproto;
public final class MessageBuilder {
}

View file

@ -25,7 +25,7 @@ public class PointerReader {
} }
public boolean isNull() { public boolean isNull() {
return this.segment.ptr.getLong(this.pointer) == 0; return this.segment.buffer.getLong(this.pointer) == 0;
} }
public StructReader getStruct() { public StructReader getStruct() {

View file

@ -3,9 +3,9 @@ package org.capnproto;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
public class SegmentReader { public class SegmentReader {
ByteBuffer ptr; ByteBuffer buffer;
public SegmentReader(ByteBuffer ptr) { public SegmentReader(ByteBuffer buffer) {
this.ptr = ptr; this.buffer = buffer;
} }
} }

View file

@ -19,13 +19,20 @@ public final class StructBuilder {
this.bit0Offset = bit0Offset; this.bit0Offset = bit0Offset;
} }
public final int getShortField(int offset) {
public int getIntField(int offset) { return this.segment.buffer.getShort(this.data + offset * 2);
return this.segment.ptr.getInt(this.data + offset * 4);
} }
public void setIntField(int offset, int value) { public final void setShortField(int offset, short value) {
this.segment.ptr.putInt(this.data + offset * 4, value); this.segment.buffer.putShort(this.data + offset * 2, value);
}
public final int getIntField(int offset) {
return this.segment.buffer.getInt(this.data + offset * 4);
}
public final void setIntField(int offset, int value) {
this.segment.buffer.putInt(this.data + offset * 4, value);
} }
} }

View file

@ -1,6 +1,6 @@
package org.capnproto; package org.capnproto;
public class StructReader { public final class StructReader {
public SegmentReader segment; public SegmentReader segment;
public int data; //byte offset to data section public int data; //byte offset to data section
public int pointers; // word offset of pointer section public int pointers; // word offset of pointer section
@ -22,44 +22,44 @@ public class StructReader {
this.nestingLimit = nestingLimit; this.nestingLimit = nestingLimit;
} }
public boolean getBoolField(int offset) { public final boolean getBoolField(int offset) {
// XXX should use unsigned operations // XXX should use unsigned operations
if (offset < this.dataSize) { if (offset < this.dataSize) {
if (offset == 0) { if (offset == 0) {
offset = this.bit0Offset; offset = this.bit0Offset;
} }
byte b = this.segment.ptr.get(offset / 8); byte b = this.segment.buffer.get(offset / 8);
return (b & (1 << (offset % 8))) != 0; return (b & (1 << (offset % 8))) != 0;
} else { } else {
return false; return false;
} }
} }
public byte getByteField(int offset) { public final byte getByteField(int offset) {
if ((offset + 1) * 8 <= this.dataSize) { if ((offset + 1) * 8 <= this.dataSize) {
return this.segment.ptr.get(this.data + offset); return this.segment.buffer.get(this.data + offset);
} else { } else {
return 0; return 0;
} }
} }
public byte getShortField(int offset) { public final byte getShortField(int offset) {
if ((offset + 1) * 16 <= this.dataSize) { if ((offset + 1) * 16 <= this.dataSize) {
return this.segment.ptr.get(this.data + offset * 2); return this.segment.buffer.get(this.data + offset * 2);
} else { } else {
return 0; return 0;
} }
} }
public int getIntField(int offset) { public final int getIntField(int offset) {
if ((offset + 1) * 32 <= this.dataSize) { if ((offset + 1) * 32 <= this.dataSize) {
return this.segment.ptr.getInt(this.data + offset * 4); return this.segment.buffer.getInt(this.data + offset * 4);
} else { } else {
return 0; return 0;
} }
} }
public PointerReader getPointerField(int ptrIndex) { public final PointerReader getPointerField(int ptrIndex) {
if (ptrIndex < this.pointerCount) { if (ptrIndex < this.pointerCount) {
return new PointerReader(this.segment, return new PointerReader(this.segment,
this.pointers + ptrIndex, this.pointers + ptrIndex,

View file

@ -8,7 +8,7 @@ final class WireHelpers {
// TODO error handling // TODO error handling
long ref = WirePointer.get(segment.ptr, refOffset); long ref = WirePointer.get(segment.buffer, refOffset);
int ptrOffset = WirePointer.target(refOffset, ref); int ptrOffset = WirePointer.target(refOffset, ref);
int structPtr = WirePointer.structPointer(ref); int structPtr = WirePointer.structPointer(ref);
int dataSizeWords = StructPointer.dataSize(structPtr); int dataSizeWords = StructPointer.dataSize(structPtr);
@ -29,7 +29,7 @@ final class WireHelpers {
byte expectedElementSize, byte expectedElementSize,
int nestingLimit) { int nestingLimit) {
long ref = WirePointer.get(segment.ptr, refOffset); long ref = WirePointer.get(segment.buffer, refOffset);
// TODO check for null, follow fars, nestingLimit // TODO check for null, follow fars, nestingLimit
if (WirePointer.isNull(ref)) { if (WirePointer.isNull(ref)) {
@ -39,7 +39,7 @@ final class WireHelpers {
int listPtr = WirePointer.listPointer(ref); int listPtr = WirePointer.listPointer(ref);
int ptrOffset = WirePointer.target(refOffset, ref); int ptrOffset = WirePointer.target(refOffset, ref);
long ptr = WirePointer.get(segment.ptr, ptrOffset); long ptr = WirePointer.get(segment.buffer, ptrOffset);
switch (ListPointer.elementSize(listPtr)) { switch (ListPointer.elementSize(listPtr)) {
case FieldSize.INLINE_COMPOSITE : { case FieldSize.INLINE_COMPOSITE : {
@ -77,10 +77,10 @@ final class WireHelpers {
public static Text.Reader readTextPointer(SegmentReader segment, public static Text.Reader readTextPointer(SegmentReader segment,
int refOffset) { int refOffset) {
long ref = WirePointer.get(segment.ptr, refOffset); long ref = WirePointer.get(segment.buffer, refOffset);
int ptrOffset = WirePointer.target(refOffset, ref); int ptrOffset = WirePointer.target(refOffset, ref);
int listPtr = WirePointer.listPointer(ref); int listPtr = WirePointer.listPointer(ref);
int size = ListPointer.elementCount(listPtr); int size = ListPointer.elementCount(listPtr);
return new Text.Reader(segment.ptr, ptrOffset, size); return new Text.Reader(segment.buffer, ptrOffset, size);
} }
} }