getters
This commit is contained in:
parent
2da0d65423
commit
77242cd15d
3 changed files with 72 additions and 13 deletions
|
@ -211,6 +211,18 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
kj::Vector<kj::String> getTypeParameters(Schema schema) {
|
||||
auto node = schema.getProto();
|
||||
kj::Vector<kj::String> result;
|
||||
if (node.getScopeId() != 0) {
|
||||
Schema parent = schemaLoader.get(node.getScopeId());
|
||||
result = getTypeParameters(parent);
|
||||
}
|
||||
for (auto parameter : node.getParameters()) {
|
||||
result.add(kj::str(parameter.getName(), "_", kj::hex(node.getId())));
|
||||
}
|
||||
return kj::mv(result);
|
||||
}
|
||||
|
||||
kj::String toUpperCase(kj::StringPtr name) {
|
||||
kj::Vector<char> result(name.size() + 4);
|
||||
|
@ -891,7 +903,50 @@ private:
|
|||
|
||||
} else if (kind == FieldKind::INTERFACE) {
|
||||
KJ_FAIL_REQUIRE("interfaces unimplemented");
|
||||
|
||||
} else if (kind == FieldKind::ANY_POINTER) {
|
||||
if (typeBody.getAnyPointer().isParameter()) {
|
||||
auto brandParam = typeBody.getAnyPointer().getParameter();
|
||||
auto structSchema = field.getContainingStruct();
|
||||
auto typeParam =
|
||||
kj::strTree(schemaLoader.get(brandParam.getScopeId()).getProto().getParameters()[brandParam.getParameterIndex()].getName(),
|
||||
"_", kj::hex(brandParam.getScopeId()));;
|
||||
|
||||
return FieldText {
|
||||
kj::strTree(
|
||||
kj::mv(unionDiscrim.readerIsDef),
|
||||
spaces(indent), " public boolean has", titleCase, "() {\n",
|
||||
unionDiscrim.has,
|
||||
spaces(indent), " return !_pointerFieldIsNull(", offset, ");\n",
|
||||
spaces(indent), " }\n",
|
||||
|
||||
spaces(indent), " public ", typeParam.flatten(), "_Reader get", titleCase, "() {\n",
|
||||
unionDiscrim.check,
|
||||
spaces(indent), " return _getPointerField(", typeParam.flatten(), "_Factory, ", offset, ");\n",
|
||||
spaces(indent), " }\n"),
|
||||
|
||||
kj::strTree(
|
||||
kj::mv(unionDiscrim.builderIsDef),
|
||||
spaces(indent), " public final boolean has", titleCase, "() {\n",
|
||||
spaces(indent), " return !_pointerFieldIsNull(", offset, ");\n",
|
||||
spaces(indent), " }\n",
|
||||
|
||||
spaces(indent), " public ", typeParam.flatten(), "_Builder get", titleCase, "() {\n",
|
||||
unionDiscrim.check,
|
||||
spaces(indent), " return _getPointerField(", typeParam.flatten(), "_Factory, ", offset, ");\n",
|
||||
spaces(indent), " }\n",
|
||||
|
||||
spaces(indent), " public org.capnproto.AnyPointer.Builder init", titleCase, "() {\n",
|
||||
unionDiscrim.set,
|
||||
spaces(indent), " org.capnproto.AnyPointer.Builder result =\n",
|
||||
spaces(indent), " new org.capnproto.AnyPointer.Builder(this.segment, this.pointers +",
|
||||
offset, ");\n",
|
||||
spaces(indent), " result.clear();\n",
|
||||
spaces(indent), " return result;\n",
|
||||
spaces(indent), " }\n",
|
||||
"\n"),
|
||||
};
|
||||
};
|
||||
return FieldText {
|
||||
kj::strTree(
|
||||
kj::mv(unionDiscrim.readerIsDef),
|
||||
|
@ -1090,19 +1145,6 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
kj::Vector<kj::String> getTypeParameters(Schema schema) {
|
||||
auto node = schema.getProto();
|
||||
kj::Vector<kj::String> result;
|
||||
if (node.getScopeId() != 0) {
|
||||
Schema parent = schemaLoader.get(node.getScopeId());
|
||||
result = getTypeParameters(parent);
|
||||
}
|
||||
for (auto parameter : node.getParameters()) {
|
||||
result.add(kj::str(parameter.getName(), "_", kj::hex(node.getId())));
|
||||
}
|
||||
return kj::mv(result);
|
||||
}
|
||||
|
||||
StructText makeStructText(kj::StringPtr scope, kj::StringPtr name, StructSchema schema,
|
||||
kj::Array<kj::StringTree> nestedTypeDecls, int indent) {
|
||||
auto proto = schema.getProto();
|
||||
|
|
|
@ -176,6 +176,10 @@ public class StructBuilder {
|
|||
this.segment.buffer.putLong(pointer * 8, 0L);
|
||||
}
|
||||
|
||||
protected final <T> T _getPointerField(FromPointerBuilder<T> factory, int index) {
|
||||
return factory.fromPointerBuilder(this.segment, this.pointers + index);
|
||||
}
|
||||
|
||||
protected final <T> T _getPointerField(FromPointerBuilderRefDefault<T> factory, int index,
|
||||
SegmentReader defaultSegment, int defaultOffset) {
|
||||
return factory.fromPointerBuilderRefDefault(this.segment, this.pointers + index, defaultSegment, defaultOffset);
|
||||
|
|
|
@ -154,6 +154,19 @@ public class StructReader {
|
|||
return this.segment.buffer.getLong((this.pointers + ptrIndex) * Constants.BYTES_PER_WORD) == 0;
|
||||
}
|
||||
|
||||
protected final <T> T _getPointerField(FromPointerReader<T> factory, int ptrIndex) {
|
||||
if (ptrIndex < this.pointerCount) {
|
||||
return factory.fromPointerReader(this.segment,
|
||||
this.pointers + ptrIndex,
|
||||
this.nestingLimit);
|
||||
} else {
|
||||
return factory.fromPointerReader(SegmentReader.EMPTY,
|
||||
0,
|
||||
this.nestingLimit);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected final <T> T _getPointerField(FromPointerReaderRefDefault<T> factory, int ptrIndex,
|
||||
SegmentReader defaultSegment, int defaultOffset) {
|
||||
if (ptrIndex < this.pointerCount) {
|
||||
|
|
Loading…
Reference in a new issue