mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 20:15:34 +00:00
Union Vector
This commit is contained in:
@@ -454,6 +454,13 @@ class CppGenerator : public BaseGenerator {
|
||||
enum_def.name + " type)";
|
||||
}
|
||||
|
||||
static std::string UnionVectorVerifySignature(const EnumDef &enum_def) {
|
||||
return "bool Verify" + enum_def.name + "Vector" +
|
||||
"(flatbuffers::Verifier &verifier, " +
|
||||
"const flatbuffers::Vector<flatbuffers::Offset<void>> *values, " +
|
||||
"const flatbuffers::Vector<uint8_t> *types)";
|
||||
}
|
||||
|
||||
static std::string UnionUnPackSignature(const EnumDef &enum_def,
|
||||
bool inclass) {
|
||||
return (inclass ? "static " : "") +
|
||||
@@ -685,6 +692,7 @@ class CppGenerator : public BaseGenerator {
|
||||
|
||||
if (enum_def.is_union) {
|
||||
code_ += UnionVerifySignature(enum_def) + ";";
|
||||
code_ += UnionVectorVerifySignature(enum_def) + ";";
|
||||
code_ += "";
|
||||
}
|
||||
}
|
||||
@@ -721,6 +729,18 @@ class CppGenerator : public BaseGenerator {
|
||||
code_ += "}";
|
||||
code_ += "";
|
||||
|
||||
code_ += "inline " + UnionVectorVerifySignature(enum_def) + " {";
|
||||
code_ += " if (values->size() != types->size()) return false;";
|
||||
code_ += " for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {";
|
||||
code_ += " if (!Verify" + enum_def.name + "(";
|
||||
code_ += " verifier, values->Get(i), types->GetEnum<" + enum_def.name + ">(i))) { ";
|
||||
code_ += " return false; ";
|
||||
code_ += " }";
|
||||
code_ += " }";
|
||||
code_ += " return true;";
|
||||
code_ += "}";
|
||||
code_ += "";
|
||||
|
||||
if (parser_.opts.generate_object_based_api) {
|
||||
// Generate union Unpack() and Pack() functions.
|
||||
code_ += "inline " + UnionUnPackSignature(enum_def, false) + " {";
|
||||
@@ -995,6 +1015,10 @@ class CppGenerator : public BaseGenerator {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BASE_TYPE_UNION: {
|
||||
code_ += "{{PRE}}Verify{{ENUM_NAME}}Vector(verifier, {{NAME}}(), {{NAME}}_type())\\";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user