Use CreateVectorOfStructs when creating a vector of structs.

(mirrored from cl/180944741)

Change-Id: Ib9f1613ccc355528c5c495fd953a9b3944ecb4ce
This commit is contained in:
Wouter van Oortmerssen
2018-01-18 11:06:38 -08:00
parent 98f681deb0
commit fee9afd80b
2 changed files with 23 additions and 12 deletions

View File

@@ -1316,7 +1316,13 @@ class CppGenerator : public BaseGenerator {
code_.SetValue("PARAM_TYPE", "const char *");
code_.SetValue("PARAM_VALUE", "nullptr");
} else if (direct && field.value.type.base_type == BASE_TYPE_VECTOR) {
auto type = GenTypeWire(field.value.type.VectorType(), "", false);
const auto vtype = field.value.type.VectorType();
std::string type;
if (IsStruct(vtype)) {
type = WrapInNameSpace(*vtype.struct_def);
} else {
type = GenTypeWire(vtype, "", false);
}
code_.SetValue("PARAM_TYPE", "const std::vector<" + type + "> *");
code_.SetValue("PARAM_VALUE", "nullptr");
} else {
@@ -1908,11 +1914,16 @@ class CppGenerator : public BaseGenerator {
",\n {{FIELD_NAME}} ? "
"_fbb.CreateString({{FIELD_NAME}}) : 0\\";
} else if (field.value.type.base_type == BASE_TYPE_VECTOR) {
auto type = GenTypeWire(field.value.type.VectorType(), "", false);
code_ +=
",\n {{FIELD_NAME}} ? "
"_fbb.CreateVector<" +
type + ">(*{{FIELD_NAME}}) : 0\\";
code_ += ",\n {{FIELD_NAME}} ? \\";
const auto vtype = field.value.type.VectorType();
if (IsStruct(vtype)) {
const auto type = WrapInNameSpace(*vtype.struct_def);
code_ += "_fbb.CreateVectorOfStructs<" + type + ">\\";
} else {
const auto type = GenTypeWire(vtype, "", false);
code_ += "_fbb.CreateVector<" + type + ">\\";
}
code_ += "(*{{FIELD_NAME}}) : 0\\";
} else {
code_ += ",\n {{FIELD_NAME}}\\";
}

View File

@@ -1166,7 +1166,7 @@ inline flatbuffers::Offset<Monster> CreateMonsterDirect(
Color color = Color_Blue,
Any test_type = Any_NONE,
flatbuffers::Offset<void> test = 0,
const std::vector<const Test *> *test4 = nullptr,
const std::vector<Test> *test4 = nullptr,
const std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring = nullptr,
const std::vector<flatbuffers::Offset<Monster>> *testarrayoftables = nullptr,
flatbuffers::Offset<Monster> enemy = 0,
@@ -1186,9 +1186,9 @@ inline flatbuffers::Offset<Monster> CreateMonsterDirect(
float testf2 = 3.0f,
float testf3 = 0.0f,
const std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring2 = nullptr,
const std::vector<const Ability *> *testarrayofsortedstruct = nullptr,
const std::vector<Ability> *testarrayofsortedstruct = nullptr,
const std::vector<uint8_t> *flex = nullptr,
const std::vector<const Test *> *test5 = nullptr,
const std::vector<Test> *test5 = nullptr,
const std::vector<int64_t> *vector_of_longs = nullptr,
const std::vector<double> *vector_of_doubles = nullptr,
flatbuffers::Offset<MyGame::InParentNamespace> parent_namespace_test = 0) {
@@ -1202,7 +1202,7 @@ inline flatbuffers::Offset<Monster> CreateMonsterDirect(
color,
test_type,
test,
test4 ? _fbb.CreateVector<const Test *>(*test4) : 0,
test4 ? _fbb.CreateVectorOfStructs<Test>(*test4) : 0,
testarrayofstring ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring) : 0,
testarrayoftables ? _fbb.CreateVector<flatbuffers::Offset<Monster>>(*testarrayoftables) : 0,
enemy,
@@ -1222,9 +1222,9 @@ inline flatbuffers::Offset<Monster> CreateMonsterDirect(
testf2,
testf3,
testarrayofstring2 ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring2) : 0,
testarrayofsortedstruct ? _fbb.CreateVector<const Ability *>(*testarrayofsortedstruct) : 0,
testarrayofsortedstruct ? _fbb.CreateVectorOfStructs<Ability>(*testarrayofsortedstruct) : 0,
flex ? _fbb.CreateVector<uint8_t>(*flex) : 0,
test5 ? _fbb.CreateVector<const Test *>(*test5) : 0,
test5 ? _fbb.CreateVectorOfStructs<Test>(*test5) : 0,
vector_of_longs ? _fbb.CreateVector<int64_t>(*vector_of_longs) : 0,
vector_of_doubles ? _fbb.CreateVector<double>(*vector_of_doubles) : 0,
parent_namespace_test);