From 00e8aa87b32b4a2dc71d1c799c0711aa294f8d46 Mon Sep 17 00:00:00 2001 From: mogemimi Date: Tue, 13 Sep 2016 20:59:57 +0900 Subject: [PATCH 1/6] Remove extra semicolon --- include/flatbuffers/flatbuffers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index b193b1791..aefde0e61 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -255,7 +255,7 @@ struct VectorIterator public: VectorIterator(const uint8_t *data, uoffset_t i) : - data_(data + IndirectHelper::element_stride * i) {}; + data_(data + IndirectHelper::element_stride * i) {} VectorIterator(const VectorIterator &other) : data_(other.data_) {} #ifndef FLATBUFFERS_CPP98_STL VectorIterator(VectorIterator &&other) : data_(std::move(other.data_)) {} From df0991b7ded0533554d3665e782273b6c8736376 Mon Sep 17 00:00:00 2001 From: Xun Liu Date: Wed, 14 Sep 2016 10:33:06 -0700 Subject: [PATCH 2/6] serialize fully qualified struct & enum name in schema binary --- src/idl_parser.cpp | 9 ++++++--- tests/monster_test.bfbs | Bin 3152 -> 3384 bytes tests/test.cpp | 10 +++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp index d845b837d..6a5808db8 100644 --- a/src/idl_parser.cpp +++ b/src/idl_parser.cpp @@ -1977,7 +1977,8 @@ std::set Parser::GetIncludedFilesRecursive( // Schema serialization functionality: template 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 void AssignIndices(const std::vector &defvec) { @@ -2023,8 +2024,9 @@ Offset StructDef::Serialize(FlatBufferBuilder *builder, (*it)->Serialize(builder, static_cast(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, @@ -2061,8 +2063,9 @@ Offset 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), diff --git a/tests/monster_test.bfbs b/tests/monster_test.bfbs index e131ac8c2ee97914bfc1c02ce683ac4f5ecb43d6..0369f896935ecf0822e50268c42f9fa4dfb9da87 100644 GIT binary patch literal 3384 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 ZvtkN#{13eqV_b)o{C-fc>2D+E{{r&+C1U^p diff --git a/tests/test.cpp b/tests/test.cpp index 45eb1fe25..2cc04fa0c 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -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); @@ -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(root, hp_field); From 4a43c2bb2c5b60ebce878f19fcebf32e380fdb7f Mon Sep 17 00:00:00 2001 From: "FTT\\kimsin" Date: Mon, 19 Sep 2016 16:16:15 +0900 Subject: [PATCH 3/6] Added IFlatbufferObject.cs file to project for .net. Before edition, IFlatbufferObject.cs file wasn't in the project and building the project throwed error. --- net/FlatBuffers/FlatBuffers.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/net/FlatBuffers/FlatBuffers.csproj b/net/FlatBuffers/FlatBuffers.csproj index 3ae938a15..2a0cf99de 100644 --- a/net/FlatBuffers/FlatBuffers.csproj +++ b/net/FlatBuffers/FlatBuffers.csproj @@ -37,6 +37,7 @@ + From b075b8c49d4a5ea296c25599ef929d6d090cc8b3 Mon Sep 17 00:00:00 2001 From: jbrads Date: Mon, 3 Oct 2016 22:14:25 +0100 Subject: [PATCH 4/6] =?UTF-8?q?=20Generate=20type=20traits=20for=20unions?= =?UTF-8?q?=20to=20map=20a=20type=20to=20the=20corresponding=20u=E2=80=A6?= =?UTF-8?q?=20(#4032)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Generate type traits for unions to map a type to the corresponding union enum value. * Fixed break with union enum type traits when type is in a namespace. * Fixed spacing and variable names in type traits generation to match style guidelines. * Fixed spacing in type traits generation to match style guidelines. * Regenerated test schema header. --- src/idl_gen_cpp.cpp | 19 ++++++++++++++++++- tests/monster_test.bfbs | Bin 3384 -> 3320 bytes tests/monster_test_generated.h | 16 ++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 74a6bf9a0..bf7472d99 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -483,7 +483,24 @@ class CppGenerator : public BaseGenerator { } code += "]; }\n\n"; } - + + // Generate type traits for unions to map from a type to union enum value. + if (enum_def.is_union) { + for (auto it = enum_def.vals.vec.begin(); + it != enum_def.vals.vec.end(); + ++it) { + auto &ev = **it; + if (it == enum_def.vals.vec.begin()) { + code += "template struct " + enum_def.name + "Traits {\n"; + } + else { + code += "template<> struct " + enum_def.name + "Traits<" + WrapInNameSpace(*ev.struct_def) + "> {\n"; + } + code += " static const " + enum_def.name + " enum_value = " + GenEnumValDecl(enum_def, ev.name, parser_.opts) + ";\n"; + code += "};\n\n"; + } + } + if (enum_def.is_union) { code += UnionVerifySignature(enum_def) + ";\n\n"; } diff --git a/tests/monster_test.bfbs b/tests/monster_test.bfbs index 0369f896935ecf0822e50268c42f9fa4dfb9da87..66d3ee8f215a67b4978d70df9bdb2e6d344e89b8 100644 GIT binary patch literal 3320 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]; } +template struct AnyTraits { + static const Any enum_value = Any_NONE; +}; + +template<> struct AnyTraits { + static const Any enum_value = Any_Monster; +}; + +template<> struct AnyTraits { + static const Any enum_value = Any_TestSimpleTableWithEnum; +}; + +template<> struct AnyTraits { + static const Any enum_value = Any_MyGame_Example2_Monster; +}; + inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type); MANUALLY_ALIGNED_STRUCT(2) Test FLATBUFFERS_FINAL_CLASS { From 520d68449f2fd1692f5ca187cf1cf561429a348d Mon Sep 17 00:00:00 2001 From: Andrew Hundt Date: Wed, 5 Oct 2016 16:20:30 -0400 Subject: [PATCH 5/6] CMake now accepts external toolchain configuration (#4045) Resolves #4038 Related to https://github.com/ruslo/hunter/pull/529 --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ad01c211a..29e021806 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,7 +99,10 @@ set(FlatBuffers_GRPCTest_SRCS # source_group(Compiler FILES ${FlatBuffers_Compiler_SRCS}) # source_group(Tests FILES ${FlatBuffers_Tests_SRCS}) -if(APPLE) +if(EXISTS "${CMAKE_TOOLCHAIN_FILE}") + # do not apply any global settings if the toolchain + # is being configured externally +elseif(APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Werror -Wextra") elseif(CMAKE_COMPILER_IS_GNUCXX) From 199157e8f47f60e0746645964f8fe53138ee2cfe Mon Sep 17 00:00:00 2001 From: Baptiste Lepilleur Date: Fri, 7 Oct 2016 18:42:29 +0200 Subject: [PATCH 6/6] flatc java generator: namespace_test2.fbs is missing namespace prefix for referToA2() return type (#4040) * Fix flatc generating incorrect java/c# code for namespace_test2.fbs. In code for TableInC, method referToA2() returned type SecondTableInA instead of NamespaceA.SecondTableInA. * Updated generated code. * Fixed indendation. --- src/idl_gen_general.cpp | 12 ++++++++++-- tests/MyGame/Example2/Monster.cs | 4 ++-- tests/namespace_test/NamespaceA/TableInFirstNS.cs | 4 ++-- tests/namespace_test/NamespaceC/TableInC.cs | 12 ++++++------ tests/namespace_test/NamespaceC/TableInC.java | 4 ++-- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/idl_gen_general.cpp b/src/idl_gen_general.cpp index 30899d4d4..3f72e92fb 100644 --- a/src/idl_gen_general.cpp +++ b/src/idl_gen_general.cpp @@ -210,17 +210,21 @@ class GeneralGenerator : public BaseGenerator { GeneralGenerator(const Parser &parser, const std::string &path, const std::string &file_name) : BaseGenerator(parser, path, file_name, "", "."), - lang_(language_parameters[parser_.opts.lang]) { + lang_(language_parameters[parser_.opts.lang]), + cur_name_space_( nullptr ) { assert(parser_.opts.lang <= IDLOptions::kMAX); }; GeneralGenerator &operator=(const GeneralGenerator &); bool generate() { std::string one_file_code; + cur_name_space_ = parser_.namespaces_.back(); for (auto it = parser_.enums_.vec.begin(); it != parser_.enums_.vec.end(); ++it) { std::string enumcode; auto &enum_def = **it; + if (!parser_.opts.one_file) + cur_name_space_ = enum_def.defined_namespace; GenEnum(enum_def, &enumcode); if (parser_.opts.one_file) { one_file_code += enumcode; @@ -234,6 +238,8 @@ class GeneralGenerator : public BaseGenerator { it != parser_.structs_.vec.end(); ++it) { std::string declcode; auto &struct_def = **it; + if (!parser_.opts.one_file) + cur_name_space_ = struct_def.defined_namespace; GenStruct(struct_def, &declcode); if (parser_.opts.one_file) { one_file_code += declcode; @@ -270,7 +276,7 @@ class GeneralGenerator : public BaseGenerator { return SaveFile(filename.c_str(), code, false); } - const Namespace *CurrentNameSpace() { return parser_.namespaces_.back(); } + const Namespace *CurrentNameSpace() { return cur_name_space_; } std::string FunctionStart(char upper) { return std::string() + (lang_.language == IDLOptions::kJava @@ -1363,6 +1369,8 @@ void GenStruct(StructDef &struct_def, std::string *code_ptr) { code += "\n\n"; } const LanguageParameters & lang_; + // This tracks the current namespace used to determine if a type need to be prefixed by its namespace + const Namespace *cur_name_space_; }; } // namespace general diff --git a/tests/MyGame/Example2/Monster.cs b/tests/MyGame/Example2/Monster.cs index 6b1602edb..2a0b6de4c 100644 --- a/tests/MyGame/Example2/Monster.cs +++ b/tests/MyGame/Example2/Monster.cs @@ -17,9 +17,9 @@ public struct Monster : IFlatbufferObject public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(0); } - public static Offset EndMonster(FlatBufferBuilder builder) { + public static Offset EndMonster(FlatBufferBuilder builder) { int o = builder.EndObject(); - return new Offset(o); + return new Offset(o); } }; diff --git a/tests/namespace_test/NamespaceA/TableInFirstNS.cs b/tests/namespace_test/NamespaceA/TableInFirstNS.cs index f1c7e96b2..3b5659af4 100644 --- a/tests/namespace_test/NamespaceA/TableInFirstNS.cs +++ b/tests/namespace_test/NamespaceA/TableInFirstNS.cs @@ -24,9 +24,9 @@ public struct TableInFirstNS : IFlatbufferObject public static void AddFooTable(FlatBufferBuilder builder, Offset fooTableOffset) { builder.AddOffset(0, fooTableOffset.Value, 0); } public static void AddFooEnum(FlatBufferBuilder builder, NamespaceA.NamespaceB.EnumInNestedNS fooEnum) { builder.AddSbyte(1, (sbyte)fooEnum, 0); } public static void AddFooStruct(FlatBufferBuilder builder, Offset fooStructOffset) { builder.AddStruct(2, fooStructOffset.Value, 0); } - public static Offset EndTableInFirstNS(FlatBufferBuilder builder) { + public static Offset EndTableInFirstNS(FlatBufferBuilder builder) { int o = builder.EndObject(); - return new Offset(o); + return new Offset(o); } }; diff --git a/tests/namespace_test/NamespaceC/TableInC.cs b/tests/namespace_test/NamespaceC/TableInC.cs index 6dddcd4db..fa53ec524 100644 --- a/tests/namespace_test/NamespaceC/TableInC.cs +++ b/tests/namespace_test/NamespaceC/TableInC.cs @@ -16,11 +16,11 @@ public struct TableInC : IFlatbufferObject public TableInC __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } public NamespaceA.TableInFirstNS? ReferToA1 { get { int o = __p.__offset(4); return o != 0 ? (NamespaceA.TableInFirstNS?)(new NamespaceA.TableInFirstNS()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } - public SecondTableInA? ReferToA2 { get { int o = __p.__offset(6); return o != 0 ? (SecondTableInA?)(new SecondTableInA()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } + public NamespaceA.SecondTableInA? ReferToA2 { get { int o = __p.__offset(6); return o != 0 ? (NamespaceA.SecondTableInA?)(new NamespaceA.SecondTableInA()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } - public static Offset CreateTableInC(FlatBufferBuilder builder, + public static Offset CreateTableInC(FlatBufferBuilder builder, Offset refer_to_a1Offset = default(Offset), - Offset refer_to_a2Offset = default(Offset)) { + Offset refer_to_a2Offset = default(Offset)) { builder.StartObject(2); TableInC.AddReferToA2(builder, refer_to_a2Offset); TableInC.AddReferToA1(builder, refer_to_a1Offset); @@ -29,10 +29,10 @@ public struct TableInC : IFlatbufferObject public static void StartTableInC(FlatBufferBuilder builder) { builder.StartObject(2); } public static void AddReferToA1(FlatBufferBuilder builder, Offset referToA1Offset) { builder.AddOffset(0, referToA1Offset.Value, 0); } - public static void AddReferToA2(FlatBufferBuilder builder, Offset referToA2Offset) { builder.AddOffset(1, referToA2Offset.Value, 0); } - public static Offset EndTableInC(FlatBufferBuilder builder) { + public static void AddReferToA2(FlatBufferBuilder builder, Offset referToA2Offset) { builder.AddOffset(1, referToA2Offset.Value, 0); } + public static Offset EndTableInC(FlatBufferBuilder builder) { int o = builder.EndObject(); - return new Offset(o); + return new Offset(o); } }; diff --git a/tests/namespace_test/NamespaceC/TableInC.java b/tests/namespace_test/NamespaceC/TableInC.java index 12658ed6d..56d495450 100644 --- a/tests/namespace_test/NamespaceC/TableInC.java +++ b/tests/namespace_test/NamespaceC/TableInC.java @@ -16,8 +16,8 @@ public final class TableInC extends Table { public NamespaceA.TableInFirstNS referToA1() { return referToA1(new NamespaceA.TableInFirstNS()); } public NamespaceA.TableInFirstNS referToA1(NamespaceA.TableInFirstNS obj) { int o = __offset(4); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; } - public SecondTableInA referToA2() { return referToA2(new SecondTableInA()); } - public SecondTableInA referToA2(SecondTableInA obj) { int o = __offset(6); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; } + public NamespaceA.SecondTableInA referToA2() { return referToA2(new NamespaceA.SecondTableInA()); } + public NamespaceA.SecondTableInA referToA2(NamespaceA.SecondTableInA obj) { int o = __offset(6); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; } public static int createTableInC(FlatBufferBuilder builder, int refer_to_a1Offset,