RefDefault

This commit is contained in:
David Renshaw 2014-10-08 13:37:26 -04:00
parent 7aead0ce75
commit 2ede4244b1
16 changed files with 106 additions and 54 deletions

View file

@ -14,7 +14,7 @@ public final class AnyPointer {
} }
public final <T> T getAs(FromPointerReader<T> factory) { public final <T> T getAs(FromPointerReader<T> factory) {
return factory.fromPointerReader(this.segment, this.pointer, null, 0, this.nestingLimit); return factory.fromPointerReader(this.segment, this.pointer, this.nestingLimit);
} }
} }

View file

@ -4,13 +4,18 @@ import java.nio.ByteBuffer;
public final class Data { public final class Data {
public static final class Factory implements FromPointerReaderBlobDefault<Reader>, public static final class Factory implements FromPointerReaderBlobDefault<Reader>,
FromPointerReader<Reader>,
FromPointerBuilderBlobDefault<Builder>, FromPointerBuilderBlobDefault<Builder>,
FromPointerBuilder<Builder>,
SetPointerBuilder<Reader>, SetPointerBuilder<Reader>,
InitSizedFromPointerBuilder<Builder> { InitSizedFromPointerBuilder<Builder> {
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer, public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
int defaultOffset, int defaultSize) { int defaultOffset, int defaultSize) {
return WireHelpers.readDataPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize); return WireHelpers.readDataPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
} }
public final Reader fromPointerReader(SegmentReader segment, int pointer, int nestingLimit) {
return WireHelpers.readDataPointer(segment, pointer, null, 0, 0);
}
public final Builder fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer, public final Builder fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer,
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) { java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
return WireHelpers.getWritableDataPointer(pointer, return WireHelpers.getWritableDataPointer(pointer,
@ -19,6 +24,11 @@ public final class Data {
defaultOffset, defaultOffset,
defaultSize); defaultSize);
} }
public final Builder fromPointerBuilder(SegmentBuilder segment, int pointer) {
return WireHelpers.getWritableDataPointer(pointer,
segment,
null, 0, 0);
}
public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) { public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
return WireHelpers.initDataPointer(pointer, segment, size); return WireHelpers.initDataPointer(pointer, segment, size);

View file

@ -30,7 +30,7 @@ public final class DataList {
} }
public Data.Reader get(int index) { public Data.Reader get(int index) {
return _getPointerElement(Data.factory, index, null, 0, 0); return _getPointerElement(Data.factory, index);
} }
public final class Iterator implements java.util.Iterator<Data.Reader> { public final class Iterator implements java.util.Iterator<Data.Reader> {
@ -41,7 +41,7 @@ public final class DataList {
} }
public Data.Reader next() { public Data.Reader next() {
return _getPointerElement(Data.factory, idx++, null, 0, 0); return this.list._getPointerElement(Data.factory, idx++);
} }
public boolean hasNext() { public boolean hasNext() {
return idx < list.size(); return idx < list.size();
@ -65,7 +65,7 @@ public final class DataList {
} }
public final Data.Builder get(int index) { public final Data.Builder get(int index) {
return _getPointerElement(Data.factory, index, null, 0, 0); return _getPointerElement(Data.factory, index);
} }
public final void set(int index, Data.Reader value) { public final void set(int index, Data.Reader value) {
@ -80,7 +80,7 @@ public final class DataList {
} }
public Data.Builder next() { public Data.Builder next() {
return this.list._getPointerElement(Data.factory, idx++, null, 0, 0); return this.list._getPointerElement(Data.factory, idx++);
} }
public boolean hasNext() { public boolean hasNext() {
return this.idx < this.list.size(); return this.idx < this.list.size();

View file

@ -1,5 +1,5 @@
package org.capnproto; package org.capnproto;
public interface FromPointerBuilder<T> { public interface FromPointerBuilder<T> {
T fromPointerBuilder(SegmentBuilder segment, int pointer, SegmentReader defaultSegment, int defaultOffset); T fromPointerBuilder(SegmentBuilder segment, int pointer);
} }

View file

@ -0,0 +1,5 @@
package org.capnproto;
public interface FromPointerBuilderRefDefault<T> {
T fromPointerBuilderRefDefault(SegmentBuilder segment, int pointer, SegmentReader defaultSegment, int defaultOffset);
}

View file

@ -1,5 +1,5 @@
package org.capnproto; package org.capnproto;
public interface FromPointerReader<T> { public interface FromPointerReader<T> {
T fromPointerReader(SegmentReader segment, int pointer, SegmentReader defaultSegment, int defaultOffset, int nestingLimit); T fromPointerReader(SegmentReader segment, int pointer, int nestingLimit);
} }

View file

@ -0,0 +1,5 @@
package org.capnproto;
public interface FromPointerReaderRefDefault<T> {
T fromPointerReaderRefDefault(SegmentReader segment, int pointer, SegmentReader defaultSegment, int defaultOffset, int nestingLimit);
}

View file

@ -104,22 +104,12 @@ public class ListBuilder {
(byte)(indexBit % 8)); (byte)(indexBit % 8));
} }
protected final <T> T _getPointerElement(FromPointerBuilder<T> factory, int index, SegmentReader defaultSegment, int defaultOffset) { protected final <T> T _getPointerElement(FromPointerBuilder<T> factory, int index) {
return factory.fromPointerBuilder( return factory.fromPointerBuilder(
this.segment, this.segment,
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD, (this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD);
defaultSegment, defaultOffset);
} }
protected final <T> T _getPointerElement(FromPointerBuilderBlobDefault<T> factory, int index,
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
return factory.fromPointerBuilderBlobDefault(
this.segment,
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
defaultBuffer, defaultOffset, defaultSize);
}
protected final <T> T _initPointerElement(InitFromPointerBuilder<T> factory, int index) { protected final <T> T _initPointerElement(InitFromPointerBuilder<T> factory, int index) {
return factory.initFromPointerBuilder( return factory.initFromPointerBuilder(
this.segment, this.segment,

View file

@ -1,17 +1,21 @@
package org.capnproto; package org.capnproto;
public abstract class ListFactory<Builder, Reader extends ListReader> public abstract class ListFactory<Builder, Reader extends ListReader>
implements ListBuilder.Factory<Builder>, FromPointerBuilder<Builder>, implements ListBuilder.Factory<Builder>,
FromPointerBuilder<Builder>,
FromPointerBuilderRefDefault<Builder>,
InitSizedFromPointerBuilder<Builder>, InitSizedFromPointerBuilder<Builder>,
SetPointerBuilder<Reader>, SetPointerBuilder<Reader>,
ListReader.Factory<Reader>, FromPointerReader<Reader> { ListReader.Factory<Reader>,
FromPointerReader<Reader>,
FromPointerReaderRefDefault<Reader> {
final byte elementSize; final byte elementSize;
ListFactory(byte elementSize) {this.elementSize = elementSize;} ListFactory(byte elementSize) {this.elementSize = elementSize;}
public final Reader fromPointerReader(SegmentReader segment, int pointer, public final Reader fromPointerReaderRefDefault(SegmentReader segment, int pointer,
SegmentReader defaultSegment, int defaultOffset, SegmentReader defaultSegment, int defaultOffset,
int nestingLimit) { int nestingLimit) {
return WireHelpers.readListPointer(this, return WireHelpers.readListPointer(this,
segment, segment,
pointer, pointer,
@ -21,7 +25,12 @@ public abstract class ListFactory<Builder, Reader extends ListReader>
nestingLimit); nestingLimit);
} }
public Builder fromPointerBuilder(SegmentBuilder segment, int pointer, SegmentReader defaultSegment, int defaultOffset) { public final Reader fromPointerReader(SegmentReader segment, int pointer, int nestingLimit) {
return fromPointerReaderRefDefault(segment, pointer, null, 0, nestingLimit);
}
public Builder fromPointerBuilderRefDefault(SegmentBuilder segment, int pointer,
SegmentReader defaultSegment, int defaultOffset) {
return WireHelpers.getWritableListPointer(this, return WireHelpers.getWritableListPointer(this,
pointer, pointer,
segment, segment,
@ -30,6 +39,14 @@ public abstract class ListFactory<Builder, Reader extends ListReader>
defaultOffset); defaultOffset);
} }
public Builder fromPointerBuilder(SegmentBuilder segment, int pointer) {
return WireHelpers.getWritableListPointer(this,
pointer,
segment,
this.elementSize,
null, 0);
}
public Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) { public Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int elementCount) {
return WireHelpers.initListPointer(this, pointer, segment, elementCount, this.elementSize); return WireHelpers.initListPointer(this, pointer, segment, elementCount, this.elementSize);
} }

View file

@ -41,7 +41,7 @@ public final class ListList {
} }
public T get(int index) { public T get(int index) {
return _getPointerElement(this.factory, index, null, 0); return _getPointerElement(this.factory, index);
} }
} }
@ -62,7 +62,7 @@ public final class ListList {
} }
public final T get(int index) { public final T get(int index) {
return _getPointerElement(this.factory, index, null, 0); return _getPointerElement(this.factory, index);
} }
} }
} }

View file

@ -86,11 +86,9 @@ public class ListReader {
this.structPointerCount, (byte) (indexBit % 8), this.nestingLimit - 1); this.structPointerCount, (byte) (indexBit % 8), this.nestingLimit - 1);
} }
protected <T> T _getPointerElement(FromPointerReader<T> factory, int index, SegmentReader defaultSegment, int defaultOffset) { protected <T> T _getPointerElement(FromPointerReader<T> factory, int index) {
return factory.fromPointerReader(this.segment, return factory.fromPointerReader(this.segment,
(this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD, (this.ptr + (index * this.step / Constants.BITS_PER_BYTE)) / Constants.BYTES_PER_WORD,
defaultSegment,
defaultOffset,
this.nestingLimit); this.nestingLimit);
} }

View file

@ -159,8 +159,9 @@ public class StructBuilder {
this.segment.buffer.putLong(pointer * 8, 0L); this.segment.buffer.putLong(pointer * 8, 0L);
} }
protected final <T> T _getPointerField(FromPointerBuilder<T> factory, int index, SegmentReader defaultSegment, int defaultOffset) { protected final <T> T _getPointerField(FromPointerBuilderRefDefault<T> factory, int index,
return factory.fromPointerBuilder(this.segment, this.pointers + index, defaultSegment, defaultOffset); SegmentReader defaultSegment, int defaultOffset) {
return factory.fromPointerBuilderRefDefault(this.segment, this.pointers + index, defaultSegment, defaultOffset);
} }
protected final <T> T _getPointerField(FromPointerBuilderBlobDefault<T> factory, int index, protected final <T> T _getPointerField(FromPointerBuilderBlobDefault<T> factory, int index,

View file

@ -1,23 +1,35 @@
package org.capnproto; package org.capnproto;
public abstract class StructFactory<Builder, Reader extends StructReader> public abstract class StructFactory<Builder, Reader extends StructReader>
implements FromPointerBuilder<Builder>, StructBuilder.Factory<Builder>, implements FromPointerBuilder<Builder>,
FromPointerBuilderRefDefault<Builder>,
StructBuilder.Factory<Builder>,
InitFromPointerBuilder<Builder>, InitFromPointerBuilder<Builder>,
SetPointerBuilder<Reader>, SetPointerBuilder<Reader>,
FromPointerReader<Reader>, StructReader.Factory<Reader> { FromPointerReader<Reader>,
public final Reader fromPointerReader(SegmentReader segment, int pointer, FromPointerReaderRefDefault<Reader>,
SegmentReader defaultSegment, int defaultOffset, StructReader.Factory<Reader> {
int nestingLimit) { public final Reader fromPointerReaderRefDefault(SegmentReader segment, int pointer,
SegmentReader defaultSegment, int defaultOffset,
int nestingLimit) {
return WireHelpers.readStructPointer(this, return WireHelpers.readStructPointer(this,
segment, segment,
pointer, pointer,
defaultSegment, defaultOffset, defaultSegment, defaultOffset,
nestingLimit); nestingLimit);
} }
public final Builder fromPointerBuilder(SegmentBuilder segment, int pointer, SegmentReader defaultSegment, int defaultOffset) { public final Reader fromPointerReader(SegmentReader segment, int pointer, int nestingLimit) {
return fromPointerReaderRefDefault(segment, pointer, null, 0, nestingLimit);
}
public final Builder fromPointerBuilderRefDefault(SegmentBuilder segment, int pointer,
SegmentReader defaultSegment, int defaultOffset) {
return WireHelpers.getWritableStructPointer(this, pointer, segment, this.structSize(), return WireHelpers.getWritableStructPointer(this, pointer, segment, this.structSize(),
defaultSegment, defaultOffset); defaultSegment, defaultOffset);
} }
public final Builder fromPointerBuilder(SegmentBuilder segment, int pointer) {
return WireHelpers.getWritableStructPointer(this, pointer, segment, this.structSize(),
null, 0);
}
public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer) { public final Builder initFromPointerBuilder(SegmentBuilder segment, int pointer) {
return WireHelpers.initStructPointer(this, pointer, segment, this.structSize()); return WireHelpers.initStructPointer(this, pointer, segment, this.structSize());
} }

View file

@ -139,19 +139,20 @@ public class StructReader {
return this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0; return this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0;
} }
protected final <T> T _getPointerField(FromPointerReader<T> factory, int ptrIndex, SegmentReader defaultSegment, int defaultOffset) { protected final <T> T _getPointerField(FromPointerReaderRefDefault<T> factory, int ptrIndex,
SegmentReader defaultSegment, int defaultOffset) {
if (ptrIndex < this.pointerCount) { if (ptrIndex < this.pointerCount) {
return factory.fromPointerReader(this.segment, return factory.fromPointerReaderRefDefault(this.segment,
this.pointers + ptrIndex, this.pointers + ptrIndex,
defaultSegment, defaultSegment,
defaultOffset, defaultOffset,
this.nestingLimit); this.nestingLimit);
} else { } else {
return factory.fromPointerReader(SegmentReader.EMPTY, return factory.fromPointerReaderRefDefault(SegmentReader.EMPTY,
0, 0,
defaultSegment, defaultSegment,
defaultOffset, defaultOffset,
this.nestingLimit); this.nestingLimit);
} }
} }

View file

@ -3,8 +3,11 @@ package org.capnproto;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
public final class Text { public final class Text {
public static final class Factory implements FromPointerReaderBlobDefault<Reader>, public static final class Factory implements
FromPointerReaderBlobDefault<Reader>,
FromPointerReader<Reader>,
FromPointerBuilderBlobDefault<Builder>, FromPointerBuilderBlobDefault<Builder>,
FromPointerBuilder<Builder>,
SetPointerBuilder<Reader>, SetPointerBuilder<Reader>,
InitSizedFromPointerBuilder<Builder> { InitSizedFromPointerBuilder<Builder> {
public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer, public final Reader fromPointerReaderBlobDefault(SegmentReader segment, int pointer, java.nio.ByteBuffer defaultBuffer,
@ -12,6 +15,10 @@ public final class Text {
return WireHelpers.readTextPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize); return WireHelpers.readTextPointer(segment, pointer, defaultBuffer, defaultOffset, defaultSize);
} }
public final Reader fromPointerReader(SegmentReader segment, int pointer, int nestingLimit) {
return WireHelpers.readTextPointer(segment, pointer, null, 0, 0);
}
public final Builder fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer, public final Builder fromPointerBuilderBlobDefault(SegmentBuilder segment, int pointer,
java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) { java.nio.ByteBuffer defaultBuffer, int defaultOffset, int defaultSize) {
return WireHelpers.getWritableTextPointer(pointer, return WireHelpers.getWritableTextPointer(pointer,
@ -21,6 +28,12 @@ public final class Text {
defaultSize); defaultSize);
} }
public final Builder fromPointerBuilder(SegmentBuilder segment, int pointer) {
return WireHelpers.getWritableTextPointer(pointer,
segment,
null, 0, 0);
}
public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) { public final Builder initSizedFromPointerBuilder(SegmentBuilder segment, int pointer, int size) {
return WireHelpers.initTextPointer(pointer, segment, size); return WireHelpers.initTextPointer(pointer, segment, size);
} }

View file

@ -30,7 +30,7 @@ public final class TextList {
} }
public Text.Reader get(int index) { public Text.Reader get(int index) {
return _getPointerElement(Text.factory, index, null, 0, 0); return _getPointerElement(Text.factory, index);
} }
public final class Iterator implements java.util.Iterator<Text.Reader> { public final class Iterator implements java.util.Iterator<Text.Reader> {
@ -41,7 +41,7 @@ public final class TextList {
} }
public Text.Reader next() { public Text.Reader next() {
return _getPointerElement(Text.factory, idx++, null, 0, 0); return this.list._getPointerElement(Text.factory, idx++);
} }
public boolean hasNext() { public boolean hasNext() {
return idx < list.size(); return idx < list.size();
@ -65,7 +65,7 @@ public final class TextList {
} }
public final Text.Builder get(int index) { public final Text.Builder get(int index) {
return _getPointerElement(Text.factory, index, null, 0, 0); return _getPointerElement(Text.factory, index);
} }
public final void set(int index, Text.Reader value) { public final void set(int index, Text.Reader value) {
@ -80,7 +80,7 @@ public final class TextList {
} }
public Text.Builder next() { public Text.Builder next() {
return this.list._getPointerElement(Text.factory, idx++, null, 0, 0); return this.list._getPointerElement(Text.factory, idx++);
} }
public boolean hasNext() { public boolean hasNext() {
return this.idx < this.list.size(); return this.idx < this.list.size();