[Go] Add mutation functions for vector elements (#5221)

Fixes #5206
This commit is contained in:
David Reiss
2019-03-05 21:16:26 -08:00
committed by Robert
parent 1c7d91cc55
commit bfa430309a
4 changed files with 137 additions and 0 deletions

View File

@@ -620,6 +620,27 @@ class GoGenerator : public BaseGenerator {
code += "}\n\n";
}
// Mutate an element of a vector of scalars.
void MutateElementOfVectorOfNonStruct(const StructDef &struct_def,
const FieldDef &field,
std::string *code_ptr) {
std::string &code = *code_ptr;
auto vectortype = field.value.type.VectorType();
std::string type = MakeCamel(GenTypeBasic(vectortype));
std::string setter = "rcv._tab.Mutate" + type;
GenReceiver(struct_def, code_ptr);
code += " Mutate" + MakeCamel(field.name);
code += "(j int, n " + TypeName(field) + ") bool ";
code += OffsetPrefix(field);
code += "\t\ta := rcv._tab.Vector(o)\n";
code += "\t\treturn " + setter + "(";
code += "a+flatbuffers.UOffsetT(j*";
code += NumToString(InlineSize(vectortype)) + "), n)\n";
code += "\t}\n";
code += "\treturn false\n";
code += "}\n\n";
}
// Generate a struct field setter, conditioned on its child type(s).
void GenStructMutator(const StructDef &struct_def, const FieldDef &field,
std::string *code_ptr) {
@@ -630,6 +651,10 @@ class GoGenerator : public BaseGenerator {
} else {
MutateScalarFieldOfTable(struct_def, field, code_ptr);
}
} else if (field.value.type.base_type == BASE_TYPE_VECTOR) {
if (IsScalar(field.value.type.element)) {
MutateElementOfVectorOfNonStruct(struct_def, field, code_ptr);
}
}
}