Skip to content

Commit

Permalink
Merge pull request #4025 from paszea/reflection_fqn
Browse files Browse the repository at this point in the history
serialize fully qualified struct & enum name in schema binary
  • Loading branch information
Wouter van Oortmerssen authored Sep 21, 2016
2 parents c4aede2 + df0991b commit f6c1a1e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
9 changes: 6 additions & 3 deletions src/idl_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1982,7 +1982,8 @@ std::set<std::string> Parser::GetIncludedFilesRecursive(
// Schema serialization functionality:

template<typename T> bool compareName(const T* a, const T* b) {
return a->name < b->name;
return a->defined_namespace->GetFullyQualifiedName(a->name)
< b->defined_namespace->GetFullyQualifiedName(b->name);
}

template<typename T> void AssignIndices(const std::vector<T *> &defvec) {
Expand Down Expand Up @@ -2028,8 +2029,9 @@ Offset<reflection::Object> StructDef::Serialize(FlatBufferBuilder *builder,
(*it)->Serialize(builder,
static_cast<uint16_t>(it - fields.vec.begin()), parser));
}
auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
return reflection::CreateObject(*builder,
builder->CreateString(name),
builder->CreateString(qualified_name),
builder->CreateVectorOfSortedTables(
&field_offsets),
fixed,
Expand Down Expand Up @@ -2066,8 +2068,9 @@ Offset<reflection::Enum> EnumDef::Serialize(FlatBufferBuilder *builder,
for (auto it = vals.vec.begin(); it != vals.vec.end(); ++it) {
enumval_offsets.push_back((*it)->Serialize(builder));
}
auto qualified_name = defined_namespace->GetFullyQualifiedName(name);
return reflection::CreateEnum(*builder,
builder->CreateString(name),
builder->CreateString(qualified_name),
builder->CreateVector(enumval_offsets),
is_union,
underlying_type.Serialize(builder),
Expand Down
Binary file modified tests/monster_test.bfbs
Binary file not shown.
10 changes: 9 additions & 1 deletion tests/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ void ReflectionTest(uint8_t *flatbuf, size_t length) {
// Make sure the schema is what we expect it to be.
auto &schema = *reflection::GetSchema(bfbsfile.c_str());
auto root_table = schema.root_table();
TEST_EQ_STR(root_table->name()->c_str(), "Monster");
TEST_EQ_STR(root_table->name()->c_str(), "MyGame.Example.Monster");
auto fields = root_table->fields();
auto hp_field_ptr = fields->LookupByKey("hp");
TEST_NOTNULL(hp_field_ptr);
Expand All @@ -446,6 +446,14 @@ void ReflectionTest(uint8_t *flatbuf, size_t length) {
TEST_NOTNULL(friendly_field_ptr->attributes());
TEST_NOTNULL(friendly_field_ptr->attributes()->LookupByKey("priority"));

// Make sure the table index is what we expect it to be.
auto pos_field_ptr = fields->LookupByKey("pos");
TEST_NOTNULL(pos_field_ptr);
TEST_EQ(pos_field_ptr->type()->base_type(), reflection::Obj);
auto pos_table_ptr = schema.objects()->Get(pos_field_ptr->type()->index());
TEST_NOTNULL(pos_table_ptr);
TEST_EQ_STR(pos_table_ptr->name()->c_str(), "MyGame.Example.Vec3");

// Now use it to dynamically access a buffer.
auto &root = *flatbuffers::GetAnyRoot(flatbuf);
auto hp = flatbuffers::GetFieldI<uint16_t>(root, hp_field);
Expand Down

0 comments on commit f6c1a1e

Please sign in to comment.