FromStructReader -> StructReader.Factory

This commit is contained in:
David Renshaw 2014-10-07 17:47:42 -04:00
parent 3aefbb76e0
commit b4f34cb393
17 changed files with 55 additions and 59 deletions

View file

@ -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;

View file

@ -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",

View file

@ -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);
}

View file

@ -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();
}

View file

@ -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);
}

View file

@ -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,

View file

@ -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);
}

View file

@ -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) {

View file

@ -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 */);

View file

@ -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());
}

View file

@ -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,

View file

@ -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

View file

@ -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);
}

View file

@ -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){

View file

@ -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

View file

@ -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,

View file

@ -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);
}