MCPcopy Create free account
hub / github.com/bytedance/Fastbot_Android / ConformTo

Method ConformTo

native/thirdpart/flatbuffers/idl_parser.cpp:3933–3984  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3931}
3932
3933std::string Parser::ConformTo(const Parser &base) {
3934 for (auto sit = structs_.vec.begin(); sit != structs_.vec.end(); ++sit) {
3935 auto &struct_def = **sit;
3936 auto qualified_name =
3937 struct_def.defined_namespace->GetFullyQualifiedName(struct_def.name);
3938 auto struct_def_base = base.LookupStruct(qualified_name);
3939 if (!struct_def_base) continue;
3940 for (auto fit = struct_def.fields.vec.begin();
3941 fit != struct_def.fields.vec.end(); ++fit) {
3942 auto &field = **fit;
3943 auto field_base = struct_def_base->fields.Lookup(field.name);
3944 if (field_base) {
3945 if (field.value.offset != field_base->value.offset)
3946 return "offsets differ for field: " + field.name;
3947 if (field.value.constant != field_base->value.constant)
3948 return "defaults differ for field: " + field.name;
3949 if (!EqualByName(field.value.type, field_base->value.type))
3950 return "types differ for field: " + field.name;
3951 } else {
3952 // Doesn't have to exist, deleting fields is fine.
3953 // But we should check if there is a field that has the same offset
3954 // but is incompatible (in the case of field renaming).
3955 for (auto fbit = struct_def_base->fields.vec.begin();
3956 fbit != struct_def_base->fields.vec.end(); ++fbit) {
3957 field_base = *fbit;
3958 if (field.value.offset == field_base->value.offset) {
3959 if (!EqualByName(field.value.type, field_base->value.type))
3960 return "field renamed to different type: " + field.name;
3961 break;
3962 }
3963 }
3964 }
3965 }
3966 }
3967 for (auto eit = enums_.vec.begin(); eit != enums_.vec.end(); ++eit) {
3968 auto &enum_def = **eit;
3969 auto qualified_name =
3970 enum_def.defined_namespace->GetFullyQualifiedName(enum_def.name);
3971 auto enum_def_base = base.enums_.Lookup(qualified_name);
3972 if (!enum_def_base) continue;
3973 for (auto evit = enum_def.Vals().begin(); evit != enum_def.Vals().end();
3974 ++evit) {
3975 auto &enum_val = **evit;
3976 auto enum_val_base = enum_def_base->Lookup(enum_val.name);
3977 if (enum_val_base) {
3978 if (enum_val != *enum_val_base)
3979 return "values differ for enum: " + enum_val.name;
3980 }
3981 }
3982 }
3983 return "";
3984}
3985
3986} // namespace flatbuffers

Callers 1

CompileMethod · 0.80

Calls 6

EqualByNameFunction · 0.85
GetFullyQualifiedNameMethod · 0.80
LookupStructMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
LookupMethod · 0.45

Tested by

no test coverage detected