get EnumList to work
This commit is contained in:
parent
ca271e2824
commit
7e49ede5a3
4 changed files with 46 additions and 81 deletions
|
@ -299,6 +299,7 @@ private:
|
||||||
case schema::Type::DATA:
|
case schema::Type::DATA:
|
||||||
return kj::strTree( "org.capnproto.DataList");
|
return kj::strTree( "org.capnproto.DataList");
|
||||||
case schema::Type::ENUM:
|
case schema::Type::ENUM:
|
||||||
|
return kj::strTree("org.capnproto.EnumList");
|
||||||
case schema::Type::INTERFACE:
|
case schema::Type::INTERFACE:
|
||||||
case schema::Type::ANY_POINTER:
|
case schema::Type::ANY_POINTER:
|
||||||
case schema::Type::LIST:
|
case schema::Type::LIST:
|
||||||
|
@ -632,8 +633,6 @@ private:
|
||||||
struct FieldText {
|
struct FieldText {
|
||||||
kj::StringTree readerMethodDecls;
|
kj::StringTree readerMethodDecls;
|
||||||
kj::StringTree builderMethodDecls;
|
kj::StringTree builderMethodDecls;
|
||||||
kj::StringTree pipelineMethodDecls;
|
|
||||||
kj::StringTree inlineMethodDefs;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class FieldKind {
|
enum class FieldKind {
|
||||||
|
@ -709,10 +708,7 @@ private:
|
||||||
},
|
},
|
||||||
" return new ", scope, titleCase, ".Builder(_builder);\n",
|
" return new ", scope, titleCase, ".Builder(_builder);\n",
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
"\n"),
|
"\n")
|
||||||
|
|
||||||
kj::strTree(),
|
|
||||||
kj::strTree()
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -866,10 +862,7 @@ private:
|
||||||
kj::strTree(spaces(indent), " _builder.set",
|
kj::strTree(spaces(indent), " _builder.set",
|
||||||
toTitleCase(type), "Field(", offset, ", value", defaultMaskParam, ");\n"))),
|
toTitleCase(type), "Field(", offset, ", value", defaultMaskParam, ");\n"))),
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
"\n"),
|
"\n")
|
||||||
|
|
||||||
kj::strTree(),
|
|
||||||
kj::strTree(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} else if (kind == FieldKind::INTERFACE) {
|
} else if (kind == FieldKind::INTERFACE) {
|
||||||
|
@ -910,9 +903,6 @@ private:
|
||||||
spaces(indent), " return result;\n",
|
spaces(indent), " return result;\n",
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
"\n"),
|
"\n"),
|
||||||
|
|
||||||
kj::strTree(),
|
|
||||||
kj::strTree()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} else if (kind == FieldKind::STRUCT) {
|
} else if (kind == FieldKind::STRUCT) {
|
||||||
|
@ -948,9 +938,6 @@ private:
|
||||||
type, ".factory.fromStructBuilder(_builder.getPointerField(", offset, ").initStruct(",
|
type, ".factory.fromStructBuilder(_builder.getPointerField(", offset, ").initStruct(",
|
||||||
type, ".STRUCT_SIZE", "));\n",
|
type, ".STRUCT_SIZE", "));\n",
|
||||||
spaces(indent), " }\n"),
|
spaces(indent), " }\n"),
|
||||||
|
|
||||||
kj::strTree(),
|
|
||||||
kj::strTree()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} else if (kind == FieldKind::BLOB && typeBody.which() == schema::Type::TEXT ) {
|
} else if (kind == FieldKind::BLOB && typeBody.which() == schema::Type::TEXT ) {
|
||||||
|
@ -994,9 +981,6 @@ private:
|
||||||
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
|
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
|
||||||
spaces(indent), " throw new Error();\n",
|
spaces(indent), " throw new Error();\n",
|
||||||
spaces(indent), " }\n"),
|
spaces(indent), " }\n"),
|
||||||
|
|
||||||
kj::strTree(),
|
|
||||||
kj::strTree()
|
|
||||||
};
|
};
|
||||||
} else if (kind == FieldKind::BLOB && typeBody.which() == schema::Type::DATA ) {
|
} else if (kind == FieldKind::BLOB && typeBody.which() == schema::Type::DATA ) {
|
||||||
|
|
||||||
|
@ -1033,9 +1017,6 @@ private:
|
||||||
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
|
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
|
||||||
spaces(indent), " throw new Error();\n",
|
spaces(indent), " throw new Error();\n",
|
||||||
spaces(indent), " }\n"),
|
spaces(indent), " }\n"),
|
||||||
|
|
||||||
kj::strTree(),
|
|
||||||
kj::strTree()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} else if (kind == FieldKind::LIST) {
|
} else if (kind == FieldKind::LIST) {
|
||||||
|
@ -1097,6 +1078,12 @@ private:
|
||||||
case schema::Type::ENUM:
|
case schema::Type::ENUM:
|
||||||
primitiveElement = true;
|
primitiveElement = true;
|
||||||
fieldSize = kj::str("org.capnproto.FieldSize.TWO_BYTES");
|
fieldSize = kj::str("org.capnproto.FieldSize.TWO_BYTES");
|
||||||
|
elementReaderType = kj::str(typeName(typeBody.getList().getElementType()));
|
||||||
|
readerClass = kj::str("Reader<", elementReaderType, ">");
|
||||||
|
elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()));
|
||||||
|
builderClass = kj::str("Builder<", elementBuilderType, ">");
|
||||||
|
readerFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".values(), ");
|
||||||
|
builderFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".values(), ");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case schema::Type::TEXT:
|
case schema::Type::TEXT:
|
||||||
|
@ -1183,59 +1170,6 @@ private:
|
||||||
kj::strTree("List(", fieldSize, ", size)")),
|
kj::strTree("List(", fieldSize, ", size)")),
|
||||||
");\n",
|
");\n",
|
||||||
spaces(indent), " }\n"),
|
spaces(indent), " }\n"),
|
||||||
|
|
||||||
kj::strTree(
|
|
||||||
kind == FieldKind::STRUCT && !hasDiscriminantValue(proto)
|
|
||||||
? kj::strTree(
|
|
||||||
" inline ", type, "::Pipeline get", titleCase, "();\n")
|
|
||||||
: kj::strTree()),
|
|
||||||
|
|
||||||
kj::strTree(
|
|
||||||
kj::mv(unionDiscrim.isDefs),
|
|
||||||
kind == FieldKind::STRUCT && !hasDiscriminantValue(proto)
|
|
||||||
? kj::strTree(
|
|
||||||
"inline ", type, "::Pipeline ", scope, "Pipeline::get", titleCase, "() {\n",
|
|
||||||
" return ", type, "::Pipeline(_typeless.getPointerField(", offset, "));\n"
|
|
||||||
"}\n")
|
|
||||||
: kj::strTree(),
|
|
||||||
"inline void ", scope, "Builder::set", titleCase, "(", type, "::Reader value) {\n",
|
|
||||||
unionDiscrim.set,
|
|
||||||
" ::capnp::_::PointerHelpers<", type, ">::set(\n"
|
|
||||||
" _builder.getPointerField(", offset, " * ::capnp::POINTERS), value);\n"
|
|
||||||
"}\n",
|
|
||||||
kind == FieldKind::LIST && !isStructOrCapList
|
|
||||||
? kj::strTree(
|
|
||||||
"inline void ", scope, "Builder::set", titleCase, "(::kj::ArrayPtr<const ", elementReaderType, "> value) {\n",
|
|
||||||
unionDiscrim.set,
|
|
||||||
" ::capnp::_::PointerHelpers<", type, ">::set(\n"
|
|
||||||
" _builder.getPointerField(", offset, " * ::capnp::POINTERS), value);\n"
|
|
||||||
"}\n")
|
|
||||||
: kj::strTree(),
|
|
||||||
kind == FieldKind::STRUCT
|
|
||||||
? kj::strTree(
|
|
||||||
"inline ", type, "::Builder ", scope, "Builder::init", titleCase, "() {\n",
|
|
||||||
unionDiscrim.set,
|
|
||||||
" return ::capnp::_::PointerHelpers<", type, ">::init(\n"
|
|
||||||
" _builder.getPointerField(", offset, " * ::capnp::POINTERS));\n"
|
|
||||||
"}\n")
|
|
||||||
: kj::strTree(
|
|
||||||
"inline ", type, "::Builder ", scope, "Builder::init", titleCase, "(unsigned int size) {\n",
|
|
||||||
unionDiscrim.set,
|
|
||||||
" return ::capnp::_::PointerHelpers<", type, ">::init(\n"
|
|
||||||
" _builder.getPointerField(", offset, " * ::capnp::POINTERS), size);\n"
|
|
||||||
"}\n"),
|
|
||||||
"inline void ", scope, "Builder::adopt", titleCase, "(\n"
|
|
||||||
" ::capnp::Orphan<", type, ">&& value) {\n",
|
|
||||||
unionDiscrim.set,
|
|
||||||
" ::capnp::_::PointerHelpers<", type, ">::adopt(\n"
|
|
||||||
" _builder.getPointerField(", offset, " * ::capnp::POINTERS), kj::mv(value));\n"
|
|
||||||
"}\n"
|
|
||||||
"inline ::capnp::Orphan<", type, "> ", scope, "Builder::disown", titleCase, "() {\n",
|
|
||||||
unionDiscrim.check,
|
|
||||||
" return ::capnp::_::PointerHelpers<", type, ">::disown(\n"
|
|
||||||
" _builder.getPointerField(", offset, " * ::capnp::POINTERS));\n"
|
|
||||||
"}\n"
|
|
||||||
"\n")
|
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
KJ_UNREACHABLE;
|
KJ_UNREACHABLE;
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
|
import org.scalatest.Matchers._;
|
||||||
import org.capnproto.test.Test._;
|
import org.capnproto.test.Test._;
|
||||||
|
|
||||||
|
|
||||||
object TestUtil {
|
object TestUtil {
|
||||||
|
|
||||||
def data(str : String) : Array[Byte] = {
|
def data(str : String) : Array[Byte] = {
|
||||||
|
@ -76,6 +78,11 @@ object TestUtil {
|
||||||
structList.get(1).setTextField(new Text.Reader("structlist 2"));
|
structList.get(1).setTextField(new Text.Reader("structlist 2"));
|
||||||
structList.get(2).setTextField(new Text.Reader("structlist 3"));
|
structList.get(2).setTextField(new Text.Reader("structlist 3"));
|
||||||
|
|
||||||
|
|
||||||
|
val enumList = builder.initEnumList(2);
|
||||||
|
enumList.set(0, TestEnum.FOO);
|
||||||
|
enumList.set(1, TestEnum.GARPLY);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -143,6 +150,9 @@ object TestUtil {
|
||||||
assert(structList.get(2).getTextField().toString() == "structlist 3")
|
assert(structList.get(2).getTextField().toString() == "structlist 3")
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
val enumList = builder.getEnumList();
|
||||||
|
(enumList.get(0)) should equal (TestEnum.FOO);
|
||||||
|
(enumList.get(1)) should equal (TestEnum.GARPLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
def checkTestMessage(reader : TestAllTypes.Reader) {
|
def checkTestMessage(reader : TestAllTypes.Reader) {
|
||||||
|
@ -208,6 +218,10 @@ object TestUtil {
|
||||||
assert(structList.get(1).getTextField().toString() == "structlist 2")
|
assert(structList.get(1).getTextField().toString() == "structlist 2")
|
||||||
assert(structList.get(2).getTextField().toString() == "structlist 3")
|
assert(structList.get(2).getTextField().toString() == "structlist 3")
|
||||||
|
|
||||||
|
val enumList = reader.getEnumList();
|
||||||
|
(enumList.get(0)) should equal (TestEnum.FOO);
|
||||||
|
(enumList.get(1)) should equal (TestEnum.GARPLY);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def checkDefaultMessage(builder : TestDefaults.Builder) {
|
def checkDefaultMessage(builder : TestDefaults.Builder) {
|
||||||
|
|
|
@ -49,7 +49,7 @@ struct TestAllTypes {
|
||||||
textList @29 : List(Text);
|
textList @29 : List(Text);
|
||||||
dataList @30 : List(Data);
|
dataList @30 : List(Data);
|
||||||
structList @31 : List(TestAllTypes);
|
structList @31 : List(TestAllTypes);
|
||||||
# enumList @32 : List(TestEnum);
|
enumList @32 : List(TestEnum);
|
||||||
# interfaceList @33 : List(Void);
|
# interfaceList @33 : List(Void);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,11 @@ public class EnumList {
|
||||||
return values[index];
|
return values[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Reader<T> {
|
public static final class Reader<T extends java.lang.Enum> {
|
||||||
public final ListReader reader;
|
public final ListReader reader;
|
||||||
public final T values[];
|
public final T values[];
|
||||||
|
|
||||||
public Reader(ListReader reader, T values[]) {
|
public Reader(T values[], ListReader reader) {
|
||||||
this.reader = reader;
|
this.reader = reader;
|
||||||
this.values = values;
|
this.values = values;
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,27 @@ public class EnumList {
|
||||||
public T get(int index) {
|
public T get(int index) {
|
||||||
return clampOrdinal(this.values, this.reader.getShortElement(index));
|
return clampOrdinal(this.values, this.reader.getShortElement(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Builder {
|
public static final class Builder<T extends java.lang.Enum> {
|
||||||
|
public final ListBuilder builder;
|
||||||
|
public final T values[];
|
||||||
|
|
||||||
|
public Builder(T values[], ListBuilder builder) {
|
||||||
|
this.builder = builder;
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return this.builder.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T get(int index) {
|
||||||
|
return clampOrdinal(this.values, this.builder.getShortElement(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int index, T value) {
|
||||||
|
this.builder.setShortElement(index, (short)value.ordinal());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue