makeListListFactoryArg

This commit is contained in:
David Renshaw 2014-10-04 14:43:50 -04:00
parent da13c77541
commit fcad26acb6
2 changed files with 23 additions and 8 deletions

View file

@ -659,6 +659,25 @@ private:
);
}
kj::String makeListListFactoryArg(schema::Type::Reader type) {
auto elementType = type.getList().getElementType();
switch (elementType.which()) {
case schema::Type::STRUCT:
return kj::str("new org.capnproto.StructList.Factory(",
typeName(elementType), ".factory), ");
case schema::Type::LIST:
return kj::str("new org.capnproto.ListList.Factory(",
makeListListFactoryArg(elementType),
"), ");
case schema::Type::ENUM:
return kj::str("new org.capnproto.EnumList.Factory(",
typeName(elementType),
".values()), ");
default:
return kj::str(typeName(type), ".factory, ");
}
}
FieldText makeFieldText(kj::StringPtr scope, StructSchema::Field field, int indent) {
auto proto = field.getProto();
kj::String titleCase = toTitleCase(proto.getName());
@ -1070,8 +1089,8 @@ private:
readerClass = kj::str("Reader<", elementReaderType, ">");
elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()), ".Builder");
builderClass = kj::str("Builder<", elementBuilderType, ">");
readerFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".factory, ");
builderFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".factory, ");
readerFactoryArg = makeListListFactoryArg(typeBody.getList().getElementType());
builderFactoryArg = kj::str(readerFactoryArg);
break;
case schema::Type::ANY_POINTER:
primitiveElement = false;
@ -1096,10 +1115,6 @@ private:
fieldSize = kj::str(typeName(typeBody.getList().getElementType()),".STRUCT_SIZE.preferredListEncoding");
break;
}
if (primitiveElement) {
elementReaderType = kj::str(typeName(typeBody.getList().getElementType()));
elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()));
}
}

View file

@ -223,8 +223,8 @@ struct TestLists {
listP @6 :List(StructP);
int32ListList @7 :List(List(Int32));
#textListList @8 :List(List(Text));
#structListList @9 :List(List(TestAllTypes));
textListList @8 :List(List(Text));
structListList @9 :List(List(TestAllTypes));
#boolListListList @10 :List(List(List(Bool)));
#enumListList @11 :List(List(TestEnum));
}