add some more builder classes; rename ptr -> buffer
This commit is contained in:
parent
c4b6bad176
commit
91f34c7d28
8 changed files with 43 additions and 24 deletions
2
Makefile
2
Makefile
|
@ -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\
|
||||||
|
|
5
src/capnp/FromStructBuilder.java
Normal file
5
src/capnp/FromStructBuilder.java
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package org.capnproto;
|
||||||
|
|
||||||
|
public interface FromStructBuilder<T> {
|
||||||
|
public abstract T fromStructBuilder(StructBuilder builder);
|
||||||
|
}
|
5
src/capnp/MessageBuilder.java
Normal file
5
src/capnp/MessageBuilder.java
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package org.capnproto;
|
||||||
|
|
||||||
|
public final class MessageBuilder {
|
||||||
|
|
||||||
|
}
|
|
@ -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() {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue