FromStructReader -> StructReader.Factory
This commit is contained in:
parent
3aefbb76e0
commit
b4f34cb393
17 changed files with 55 additions and 59 deletions
|
@ -7,8 +7,6 @@ import java.io.FileInputStream;
|
|||
import java.io.FileOutputStream;
|
||||
import java.io.FileDescriptor;
|
||||
|
||||
import org.capnproto.FromStructReader;
|
||||
import org.capnproto.FromStructBuilder;
|
||||
import org.capnproto.StructFactory;
|
||||
import org.capnproto.MessageBuilder;
|
||||
import org.capnproto.MessageReader;
|
||||
|
|
|
@ -1189,11 +1189,11 @@ private:
|
|||
|
||||
spaces(indent), " public static class Factory implements org.capnproto.StructFactory<Builder, Reader> {\n",
|
||||
spaces(indent),
|
||||
" public final Reader fromStructReader(org.capnproto.SegmentReader segment, int data,",
|
||||
" public final Reader constructReader(org.capnproto.SegmentReader segment, int data,",
|
||||
"int pointers, int dataSize, short pointerCount, byte bit0Offset, int nestingLimit) {\n",
|
||||
spaces(indent), " return new Reader(segment,data,pointers,dataSize,pointerCount,bit0Offset,nestingLimit);\n",
|
||||
spaces(indent), " }\n",
|
||||
spaces(indent), " public final Builder fromStructBuilder(org.capnproto.SegmentBuilder segment, int data,",
|
||||
spaces(indent), " public final Builder constructBuilder(org.capnproto.SegmentBuilder segment, int data,",
|
||||
"int pointers, int dataSize, short pointerCount, byte bit0Offset) {\n",
|
||||
spaces(indent), " return new Builder(segment, data, pointers, dataSize, pointerCount, bit0Offset);\n",
|
||||
spaces(indent), " }\n",
|
||||
|
|
|
@ -9,7 +9,7 @@ public final class AnyPointer {
|
|||
this.reader = reader;
|
||||
}
|
||||
|
||||
public final <T> T getAsStruct(FromStructReader<T> factory) {
|
||||
public final <T> T getAsStruct(StructReader.Factory<T> factory) {
|
||||
return this.reader.getStruct(factory);
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ public final class AnyPointer {
|
|||
this.builder = builder;
|
||||
}
|
||||
|
||||
public final <T> T initAsStruct(FromStructBuilder<T> factory) {
|
||||
public final <T> T initAsStruct(StructBuilder.Factory<T> factory) {
|
||||
return this.builder.initStruct(factory);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface FromStructBuilder<T> {
|
||||
T fromStructBuilder(SegmentBuilder segment, int data, int pointers, int dataSize,
|
||||
short pointerCount, byte bit0Offset);
|
||||
StructSize structSize();
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface FromStructReader<T> {
|
||||
T fromStructReader(SegmentReader segment, int data, int pointers,
|
||||
int dataSize, short pointerCount,
|
||||
byte bit0Offset, int nestingLimit);
|
||||
}
|
|
@ -85,12 +85,12 @@ public class ListBuilder {
|
|||
this.segment.buffer.putDouble(this.ptr + index * 8, value);
|
||||
}
|
||||
|
||||
protected final <T> T _getStructElement(FromStructBuilder<T> factory, int index) {
|
||||
protected final <T> T _getStructElement(StructBuilder.Factory<T> factory, int index) {
|
||||
int indexBit = index * this.step;
|
||||
int structData = this.ptr + indexBit / 8 ;
|
||||
int structPointers = (structData + (this.structDataSize / 8)) / 8;
|
||||
|
||||
return factory.fromStructBuilder(this.segment,
|
||||
return factory.constructBuilder(this.segment,
|
||||
structData,
|
||||
structPointers,
|
||||
this.structDataSize,
|
||||
|
|
|
@ -66,7 +66,7 @@ public class ListReader {
|
|||
return this.segment.buffer.getDouble(this.ptr + index * 8);
|
||||
}
|
||||
|
||||
protected <T> T _getStructElement(FromStructReader<T> factory, int index) {
|
||||
protected <T> T _getStructElement(StructReader.Factory<T> factory, int index) {
|
||||
// TODO check nesting limit
|
||||
|
||||
int indexBit = index * this.step;
|
||||
|
@ -74,7 +74,7 @@ public class ListReader {
|
|||
int structData = this.ptr + (indexBit / 8);
|
||||
int structPointers = structData + (this.structDataSize / 8);
|
||||
|
||||
return factory.fromStructReader(this.segment, structData, structPointers / 8, this.structDataSize,
|
||||
return factory.constructReader(this.segment, structData, structPointers / 8, this.structDataSize,
|
||||
this.structPointerCount, (byte) (indexBit % 8), this.nestingLimit - 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,11 +19,11 @@ public final class MessageBuilder {
|
|||
allocationStrategy);
|
||||
}
|
||||
|
||||
public <T> T getRoot(FromStructBuilder<T> factory) {
|
||||
public <T> T getRoot(StructBuilder.Factory<T> factory) {
|
||||
throw new Error("unimplemented");
|
||||
}
|
||||
|
||||
public <T> T initRoot(FromStructBuilder<T> factory) {
|
||||
public <T> T initRoot(StructBuilder.Factory <T> factory) {
|
||||
SegmentBuilder rootSegment = this.arena.segments.get(0);
|
||||
int location = rootSegment.allocate(1);
|
||||
if (location == SegmentBuilder.FAILED_ALLOCATION) {
|
||||
|
|
|
@ -9,7 +9,7 @@ public final class MessageReader {
|
|||
this.arena = new ReaderArena(segmentSlices);
|
||||
}
|
||||
|
||||
public <T> T getRoot(FromStructReader<T> factory) {
|
||||
public <T> T getRoot(StructReader.Factory<T> factory) {
|
||||
SegmentReader segment = this.arena.tryGetSegment(0);
|
||||
PointerReader pointerReader = PointerReader.getRoot(segment, 0,
|
||||
0x7fffffff /* XXX */);
|
||||
|
|
|
@ -18,11 +18,11 @@ public final class PointerBuilder {
|
|||
}
|
||||
|
||||
|
||||
public final <T> T getStruct(FromStructBuilder<T> factory) {
|
||||
public final <T> T getStruct(StructBuilder.Factory<T> factory) {
|
||||
return WireHelpers.getWritableStructPointer(factory, this.pointer, this.segment, factory.structSize(), null, 0);
|
||||
}
|
||||
|
||||
public final <T> T getStruct(FromStructBuilder<T> factory, SegmentReader defaultReader, int defaultOffset) {
|
||||
public final <T> T getStruct(StructBuilder.Factory<T> factory, SegmentReader defaultReader, int defaultOffset) {
|
||||
return WireHelpers.getWritableStructPointer(factory, this.pointer, this.segment, factory.structSize(),
|
||||
defaultReader, defaultOffset);
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public final class PointerBuilder {
|
|||
defaultSize);
|
||||
}
|
||||
|
||||
public final <T> T initStruct(FromStructBuilder<T> factory) {
|
||||
public final <T> T initStruct(StructBuilder.Factory<T> factory) {
|
||||
return WireHelpers.initStructPointer(factory, this.pointer, this.segment, factory.structSize());
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ public final class PointerReader {
|
|||
return this.segment.buffer.getLong(this.pointer) == 0;
|
||||
}
|
||||
|
||||
public <T> T getStruct(FromStructReader<T> factory) {
|
||||
public <T> T getStruct(StructReader.Factory<T> factory) {
|
||||
return WireHelpers.readStructPointer(factory,
|
||||
this.segment,
|
||||
this.pointer,
|
||||
|
@ -36,7 +36,7 @@ public final class PointerReader {
|
|||
this.nestingLimit);
|
||||
}
|
||||
|
||||
public <T> T getStruct(FromStructReader<T> factory, SegmentReader defaultSegment, int defaultOffset) {
|
||||
public <T> T getStruct(StructReader.Factory<T> factory, SegmentReader defaultSegment, int defaultOffset) {
|
||||
return WireHelpers.readStructPointer(factory,
|
||||
this.segment,
|
||||
this.pointer,
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
package org.capnproto;
|
||||
|
||||
public class StructBuilder {
|
||||
|
||||
public interface Factory<T> {
|
||||
T constructBuilder(SegmentBuilder segment, int data, int pointers, int dataSize,
|
||||
short pointerCount, byte bit0Offset);
|
||||
StructSize structSize();
|
||||
}
|
||||
|
||||
protected final SegmentBuilder segment;
|
||||
protected final int data; // byte offset to data section
|
||||
protected final int pointers; // word offset of pointer section
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package org.capnproto;
|
||||
|
||||
public interface StructFactory<Builder, Reader> extends FromStructBuilder<Builder>, FromStructReader<Reader>{
|
||||
|
||||
public interface StructFactory<Builder, Reader> extends StructBuilder.Factory<Builder>, StructReader.Factory<Reader>{
|
||||
public Reader asReader(Builder builder);
|
||||
|
||||
}
|
||||
|
|
|
@ -54,9 +54,9 @@ public final class StructList {
|
|||
}
|
||||
|
||||
public static final class Reader<T> extends ListReader implements Iterable<T> {
|
||||
public final FromStructReader<T> factory;
|
||||
public final StructReader.Factory<T> factory;
|
||||
|
||||
public Reader(FromStructReader<T> factory,
|
||||
public Reader(StructReader.Factory<T> factory,
|
||||
SegmentReader segment,
|
||||
int ptr,
|
||||
int elementCount, int step,
|
||||
|
@ -95,9 +95,9 @@ public final class StructList {
|
|||
}
|
||||
|
||||
public static final class Builder<T> extends ListBuilder implements Iterable<T> {
|
||||
public final FromStructBuilder<T> factory;
|
||||
public final StructBuilder.Factory<T> factory;
|
||||
|
||||
public Builder(FromStructBuilder<T> factory,
|
||||
public Builder(StructBuilder.Factory<T> factory,
|
||||
SegmentBuilder segment, int ptr,
|
||||
int elementCount, int step,
|
||||
int structDataSize, short structPointerCount){
|
||||
|
|
|
@ -2,6 +2,13 @@ package org.capnproto;
|
|||
|
||||
|
||||
public class StructReader {
|
||||
|
||||
public interface Factory<T> {
|
||||
T constructReader(SegmentReader segment, int data, int pointers,
|
||||
int dataSize, short pointerCount,
|
||||
byte bit0Offset, int nestingLimit);
|
||||
}
|
||||
|
||||
protected final SegmentReader segment;
|
||||
protected final int data; //byte offset to data section
|
||||
protected final int pointers; // word offset of pointer section
|
||||
|
|
|
@ -146,18 +146,18 @@ final class WireHelpers {
|
|||
}
|
||||
|
||||
|
||||
static <T> T initStructPointer(FromStructBuilder<T> factory,
|
||||
static <T> T initStructPointer(StructBuilder.Factory<T> factory,
|
||||
int refOffset,
|
||||
SegmentBuilder segment,
|
||||
StructSize size) {
|
||||
AllocateResult allocation = allocate(refOffset, segment, size.total(), WirePointer.STRUCT);
|
||||
StructPointer.setFromStructSize(allocation.segment.buffer, allocation.refOffset, size);
|
||||
return factory.fromStructBuilder(allocation.segment, allocation.ptr * Constants.BYTES_PER_WORD,
|
||||
return factory.constructBuilder(allocation.segment, allocation.ptr * Constants.BYTES_PER_WORD,
|
||||
allocation.ptr + size.data,
|
||||
size.data * 64, size.pointers, (byte)0);
|
||||
}
|
||||
|
||||
static <T> T getWritableStructPointer(FromStructBuilder<T> factory,
|
||||
static <T> T getWritableStructPointer(StructBuilder.Factory<T> factory,
|
||||
int refOffset,
|
||||
SegmentBuilder segment,
|
||||
StructSize size,
|
||||
|
@ -181,7 +181,7 @@ final class WireHelpers {
|
|||
if (oldDataSize < size.data || oldPointerCount < size.pointers) {
|
||||
throw new Error("unimplemented");
|
||||
} else {
|
||||
return factory.fromStructBuilder(resolved.segment, resolved.ptr * Constants.BYTES_PER_WORD,
|
||||
return factory.constructBuilder(resolved.segment, resolved.ptr * Constants.BYTES_PER_WORD,
|
||||
oldPointerSectionOffset, oldDataSize * Constants.BITS_PER_WORD,
|
||||
oldPointerCount, (byte)0);
|
||||
}
|
||||
|
@ -435,7 +435,7 @@ final class WireHelpers {
|
|||
|
||||
}
|
||||
|
||||
static <T> T readStructPointer(FromStructReader<T> factory,
|
||||
static <T> T readStructPointer(StructReader.Factory<T> factory,
|
||||
SegmentReader segment,
|
||||
int refOffset,
|
||||
SegmentReader defaultSegment,
|
||||
|
@ -444,7 +444,7 @@ final class WireHelpers {
|
|||
long ref = WirePointer.get(segment.buffer, refOffset);
|
||||
if (WirePointer.isNull(ref)) {
|
||||
if (defaultSegment == null) {
|
||||
return factory.fromStructReader(SegmentReader.EMPTY, 0, 0, 0, (short) 0, (byte) 0, 0x7fffffff);
|
||||
return factory.constructReader(SegmentReader.EMPTY, 0, 0, 0, (short) 0, (byte) 0, 0x7fffffff);
|
||||
} else {
|
||||
segment = defaultSegment;
|
||||
refOffset = defaultOffset;
|
||||
|
@ -468,7 +468,7 @@ final class WireHelpers {
|
|||
|
||||
// TODO "bounds_check" (read limiting)
|
||||
|
||||
return factory.fromStructReader(resolved.segment,
|
||||
return factory.constructReader(resolved.segment,
|
||||
resolved.ptr * Constants.BYTES_PER_WORD,
|
||||
(resolved.ptr + dataSizeWords),
|
||||
dataSizeWords * Constants.BITS_PER_WORD,
|
||||
|
|
|
@ -5,8 +5,8 @@ import org.scalatest.FunSuite
|
|||
|
||||
class LayoutSuite extends FunSuite {
|
||||
|
||||
class BareStructReader extends FromStructReader[StructReader] {
|
||||
def fromStructReader(segment: org.capnproto.SegmentReader, data: Int, pointers: Int,
|
||||
class BareStructReader extends StructReader.Factory[StructReader] {
|
||||
def constructReader(segment: org.capnproto.SegmentReader, data: Int, pointers: Int,
|
||||
dataSize: Int, pointerCount: Short, bit0Offset: Byte, nestingLimit:Int) : StructReader = {
|
||||
return new StructReader(segment,data,pointers,dataSize,pointerCount,bit0Offset,nestingLimit);
|
||||
}
|
||||
|
@ -97,9 +97,9 @@ class LayoutSuite extends FunSuite {
|
|||
}
|
||||
|
||||
|
||||
class BareStructBuilder(structSize : StructSize) extends FromStructBuilder[StructBuilder] {
|
||||
class BareStructBuilder(structSize : StructSize) extends StructBuilder.Factory[StructBuilder] {
|
||||
|
||||
def fromStructBuilder(segment: org.capnproto.SegmentBuilder, data: Int, pointers: Int,
|
||||
def constructBuilder(segment: org.capnproto.SegmentBuilder, data: Int, pointers: Int,
|
||||
dataSize: Int, pointerCount: Short, bit0Offset: Byte) : StructBuilder = {
|
||||
return new StructBuilder(segment,data,pointers,dataSize,pointerCount,bit0Offset);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue