add AnyList

This commit is contained in:
Vaci Koblizek 2020-11-30 20:20:53 +00:00
parent e9493cf2e1
commit 837f1b324c
3 changed files with 69 additions and 6 deletions

View file

@ -414,6 +414,8 @@ private:
return kj::strTree("org.capnproto.Capability.", suffix); return kj::strTree("org.capnproto.Capability.", suffix);
case schema::Type::AnyPointer::Unconstrained::STRUCT: case schema::Type::AnyPointer::Unconstrained::STRUCT:
return kj::strTree("org.capnproto.AnyStruct.", suffix); return kj::strTree("org.capnproto.AnyStruct.", suffix);
case schema::Type::AnyPointer::Unconstrained::LIST:
return kj::strTree("org.capnproto.AnyList.", suffix);
default: default:
return kj::strTree("org.capnproto.AnyPointer.", suffix); return kj::strTree("org.capnproto.AnyPointer.", suffix);
} }
@ -781,6 +783,8 @@ private:
return kj::str("org.capnproto.Capability.factory"); return kj::str("org.capnproto.Capability.factory");
case schema::Type::AnyPointer::Unconstrained::STRUCT: case schema::Type::AnyPointer::Unconstrained::STRUCT:
return kj::str("org.capnproto.AnyStruct.factory"); return kj::str("org.capnproto.AnyStruct.factory");
case schema::Type::AnyPointer::Unconstrained::LIST:
return kj::str("org.capnproto.AnyList.factory");
default: default:
return kj::str("org.capnproto.AnyPointer.factory"); return kj::str("org.capnproto.AnyPointer.factory");
} }
@ -1042,7 +1046,8 @@ private:
kind = FieldKind::ANY_POINTER; kind = FieldKind::ANY_POINTER;
break; break;
case schema::Type::AnyPointer::Unconstrained::LIST: case schema::Type::AnyPointer::Unconstrained::LIST:
kind = FieldKind::LIST; kind = FieldKind::ANY_POINTER;
break;
case schema::Type::AnyPointer::Unconstrained::CAPABILITY: case schema::Type::AnyPointer::Unconstrained::CAPABILITY:
kind = FieldKind::INTERFACE; kind = FieldKind::INTERFACE;
break; break;

View file

@ -60,11 +60,11 @@ struct TestAnyPointer {
# in the struct. # in the struct.
} }
#struct TestAnyOthers { struct TestAnyOthers {
# anyStructField @0 :AnyStruct; anyStructField @0 :AnyStruct;
# anyListField @1 :AnyList; anyListField @1 :AnyList;
# capabilityField @2 :Capability; capabilityField @2 :Capability;
#} }
struct TestOutOfOrder { struct TestOutOfOrder {
foo @3 :Text; foo @3 :Text;

View file

@ -0,0 +1,58 @@
package org.capnproto;
public class AnyList {
public static final class Factory extends ListFactory<Builder, Reader> {
Factory() {
super(ElementSize.VOID);
}
public final Reader asReader(Builder builder) {
return builder.asReader();
}
@Override
public Builder constructBuilder(SegmentBuilder segment, int ptr, int elementCount, int step, int structDataSize, short structPointerCount) {
return new Builder(segment, ptr, elementCount, step, structDataSize, structPointerCount);
}
@Override
public Reader constructReader(SegmentReader segment, int ptr, int elementCount, int step, int structDataSize, short structPointerCount, int nestingLimit) {
return new Reader(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit);
}
}
public static final Factory factory = new Factory();
public static final ListList.Factory<Builder,Reader> listFactory =
new ListList.Factory<>(factory);
public static final class Builder extends ListBuilder {
Builder(SegmentBuilder segment, int ptr, int elementCount, int step, int structDataSize, short structPointerCount){
super(segment, ptr, elementCount, step, structDataSize, structPointerCount);
}
public final Reader asReader() {
return new Reader(this.segment, this.ptr, this.elementCount, this.step, this.structDataSize, this.structPointerCount, 0x7fffffff);
}
public final <T> T initAs(Factory<T> factory) {
return factory.constructBuilder(this.segment, this.ptr, this.elementCount, this.step, this.structDataSize, this.structPointerCount);
}
public final <T> T setAs(Factory<T> factory) {
return factory.constructBuilder(this.segment, this.ptr, this.elementCount, this.step, this.structDataSize, this.structPointerCount);
}
}
public static final class Reader extends ListReader {
Reader(SegmentReader segment, int ptr, int elementCount, int step, int structDataSize, short structPointerCount, int nestingLimit){
super(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit);
}
public final <T> T getAs(Factory<T> factory) {
return factory.constructReader(this.segment, this.ptr, this.elementCount, this.step, this.structDataSize, this.structPointerCount, this.nestingLimit);
}
}
}