From bf26a0eccc0739a076e7b5f83e64d91c4abb1256 Mon Sep 17 00:00:00 2001 From: daksenik Date: Mon, 4 Jul 2016 16:34:41 +0300 Subject: [PATCH 1/5] Fixed operator++. Added CreateXXX for vector types. --- include/flatbuffers/flatbuffers.h | 2 +- src/idl_gen_cpp.cpp | 77 +++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index 6755ec279..e3b10f6b1 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -288,7 +288,7 @@ public: } VectorIterator operator++(int) { - VectorIterator temp(data_); + VectorIterator temp(data_,0); data_ += IndirectHelper::element_stride; return temp; } diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index c690240d6..72a7dc519 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -719,6 +719,83 @@ class CppGenerator : public BaseGenerator { } } code += " return builder_.Finish();\n}\n\n"; + + //Generate a CreateX function with vector types as parameters + std::vectorvect_pars_ids; + code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; + code += struct_def.name; + code += "(flatbuffers::FlatBufferBuilder &_fbb"; + for (auto it = struct_def.fields.vec.begin(); + it != struct_def.fields.vec.end(); ++it) { + auto &field = **it; + if (!field.deprecated) { + if (field.value.type.base_type == BASE_TYPE_STRING) { + vect_pars_ids.push_back(*it); + code += ",\n const char *"; + code += field.name + " = \"\""; + } + else if (field.value.type.base_type == BASE_TYPE_VECTOR) { + vect_pars_ids.push_back(*it); + code += ",\n std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + "> " + field.name; + code += " = std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">()"; + } + else { + code += ",\n " + GenTypeWire(field.value.type, " ", true); + code += field.name + " = "; + if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { + auto ev = field.value.type.enum_def->ReverseLookup( + static_cast(StringToInt(field.value.constant.c_str())), + false); + if (ev) { + code += WrapInNameSpace( + field.value.type.enum_def->defined_namespace, + GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts)); + } + else { + code += GenUnderlyingCast(field, true, field.value.constant); + } + } + else if (field.value.type.base_type == BASE_TYPE_BOOL) { + code += field.value.constant == "0" ? "false" : "true"; + } + else { + code += GenDefaultConstant(field); + } + } + } + } + code += ") {\n "; + //getting offsets + + for (auto it = vect_pars_ids.begin(); + it != vect_pars_ids.end(); ++it) { + auto&field = **it; + code += "auto " + field.name + "_off = "; + if (field.value.type.base_type == BASE_TYPE_STRING) { + code += "_fbb.CreateString(" + field.name + ");\n "; + } + else if (field.value.type.base_type == BASE_TYPE_VECTOR) { + code += "_fbb.CreateVector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">(" + field.name + ");\n "; + } + } + + //... + code += struct_def.name + "Builder builder_(_fbb);\n"; + for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1; + size; size /= 2) { + for (auto it = struct_def.fields.vec.rbegin(); + it != struct_def.fields.vec.rend(); ++it) { + auto &field = **it; + if (!field.deprecated && (!struct_def.sortbysize || + size == SizeOf(field.value.type.base_type))) { + code += " builder_.add_" + field.name + "("; + code += (!IsScalar(field.value.type.base_type) && (!IsStruct(field.value.type))) ? //if vector or string + (field.name + "_off") : field.name; + code += ");\n"; + } + } + } + code += " return builder_.Finish();\n}\n\n"; } static void GenPadding(const FieldDef &field, std::string &code, From c2411e9c8c7a1128ec0afa93d93243e4910d352c Mon Sep 17 00:00:00 2001 From: daksenik Date: Mon, 4 Jul 2016 17:37:23 +0300 Subject: [PATCH 2/5] Fixed operator++. Added CreateXXX for vector types. --- src/idl_gen_cpp.cpp | 132 ++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 65 deletions(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 72a7dc519..ba79fffd5 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -679,6 +679,9 @@ class CppGenerator : public BaseGenerator { // Generate a convenient CreateX function that uses the above builder // to create a table in one go. + + std::vectorvect_pars; + code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; code += struct_def.name; code += "(flatbuffers::FlatBufferBuilder &_fbb"; @@ -686,6 +689,7 @@ class CppGenerator : public BaseGenerator { it != struct_def.fields.vec.end(); ++it) { auto &field = **it; if (!field.deprecated) { + if (field.value.type.base_type == BASE_TYPE_STRING || field.value.type.base_type == BASE_TYPE_VECTOR) vect_pars.push_back(*it); code += ",\n " + GenTypeWire(field.value.type, " ", true); code += field.name + " = "; if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { @@ -721,81 +725,79 @@ class CppGenerator : public BaseGenerator { code += " return builder_.Finish();\n}\n\n"; //Generate a CreateX function with vector types as parameters - std::vectorvect_pars_ids; - code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; - code += struct_def.name; - code += "(flatbuffers::FlatBufferBuilder &_fbb"; - for (auto it = struct_def.fields.vec.begin(); - it != struct_def.fields.vec.end(); ++it) { - auto &field = **it; - if (!field.deprecated) { - if (field.value.type.base_type == BASE_TYPE_STRING) { - vect_pars_ids.push_back(*it); - code += ",\n const char *"; - code += field.name + " = \"\""; - } - else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - vect_pars_ids.push_back(*it); - code += ",\n std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + "> " + field.name; - code += " = std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">()"; - } - else { - code += ",\n " + GenTypeWire(field.value.type, " ", true); - code += field.name + " = "; - if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { - auto ev = field.value.type.enum_def->ReverseLookup( - static_cast(StringToInt(field.value.constant.c_str())), - false); - if (ev) { - code += WrapInNameSpace( - field.value.type.enum_def->defined_namespace, - GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts)); - } - else { - code += GenUnderlyingCast(field, true, field.value.constant); - } + if (vect_pars.size()) { + code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; + code += struct_def.name; + code += "(flatbuffers::FlatBufferBuilder &_fbb"; + for (auto it = struct_def.fields.vec.begin(); + it != struct_def.fields.vec.end(); ++it) { + auto &field = **it; + if (!field.deprecated) { + if (field.value.type.base_type == BASE_TYPE_STRING) { + code += ",\n const char *"; + code += field.name + " = \"\""; } - else if (field.value.type.base_type == BASE_TYPE_BOOL) { - code += field.value.constant == "0" ? "false" : "true"; + else if (field.value.type.base_type == BASE_TYPE_VECTOR) { + code += ",\n std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + "> " + field.name; + code += " = std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">()"; } else { - code += GenDefaultConstant(field); + code += ",\n " + GenTypeWire(field.value.type, " ", true); + code += field.name + " = "; + if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { + auto ev = field.value.type.enum_def->ReverseLookup( + static_cast(StringToInt(field.value.constant.c_str())), + false); + if (ev) { + code += WrapInNameSpace( + field.value.type.enum_def->defined_namespace, + GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts)); + } + else { + code += GenUnderlyingCast(field, true, field.value.constant); + } + } + else if (field.value.type.base_type == BASE_TYPE_BOOL) { + code += field.value.constant == "0" ? "false" : "true"; + } + else { + code += GenDefaultConstant(field); + } } } } - } - code += ") {\n "; - //getting offsets + code += ") {\n "; + //getting offsets - for (auto it = vect_pars_ids.begin(); - it != vect_pars_ids.end(); ++it) { - auto&field = **it; - code += "auto " + field.name + "_off = "; - if (field.value.type.base_type == BASE_TYPE_STRING) { - code += "_fbb.CreateString(" + field.name + ");\n "; - } - else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += "_fbb.CreateVector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">(" + field.name + ");\n "; - } - } - - //... - code += struct_def.name + "Builder builder_(_fbb);\n"; - for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1; - size; size /= 2) { - for (auto it = struct_def.fields.vec.rbegin(); - it != struct_def.fields.vec.rend(); ++it) { - auto &field = **it; - if (!field.deprecated && (!struct_def.sortbysize || - size == SizeOf(field.value.type.base_type))) { - code += " builder_.add_" + field.name + "("; - code += (!IsScalar(field.value.type.base_type) && (!IsStruct(field.value.type))) ? //if vector or string - (field.name + "_off") : field.name; - code += ");\n"; + for (auto it = vect_pars.begin(); + it != vect_pars.end(); ++it) { + auto&field = **it; + code += "auto " + field.name + "_off = "; + if (field.value.type.base_type == BASE_TYPE_STRING) { + code += "_fbb.CreateString(" + field.name + ");\n "; + } + else if (field.value.type.base_type == BASE_TYPE_VECTOR) { + code += "_fbb.CreateVector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">(" + field.name + ");\n "; } } + + code += struct_def.name + "Builder builder_(_fbb);\n"; + for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1; + size; size /= 2) { + for (auto it = struct_def.fields.vec.rbegin(); + it != struct_def.fields.vec.rend(); ++it) { + auto &field = **it; + if (!field.deprecated && (!struct_def.sortbysize || + size == SizeOf(field.value.type.base_type))) { + code += " builder_.add_" + field.name + "("; + code += (field.value.type.base_type == BASE_TYPE_STRING || field.value.type.base_type == BASE_TYPE_VECTOR) ? //if vector or string + (field.name + "_off") : field.name; + code += ");\n"; + } + } + } + code += " return builder_.Finish();\n}\n\n"; } - code += " return builder_.Finish();\n}\n\n"; } static void GenPadding(const FieldDef &field, std::string &code, From dfbda986d7f387b0b36713df1a2e8420f8fcbb31 Mon Sep 17 00:00:00 2001 From: daksenik Date: Fri, 8 Jul 2016 12:35:57 +0300 Subject: [PATCH 3/5] New CreateXXX (with vectors and strings) calls old CreateXXX (with offsets). --- src/idl_gen_cpp.cpp | 56 +++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index ba79fffd5..64dc15871 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -680,7 +680,7 @@ class CppGenerator : public BaseGenerator { // Generate a convenient CreateX function that uses the above builder // to create a table in one go. - std::vectorvect_pars; + bool gen_vector_pars = false; code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; code += struct_def.name; @@ -689,7 +689,7 @@ class CppGenerator : public BaseGenerator { it != struct_def.fields.vec.end(); ++it) { auto &field = **it; if (!field.deprecated) { - if (field.value.type.base_type == BASE_TYPE_STRING || field.value.type.base_type == BASE_TYPE_VECTOR) vect_pars.push_back(*it); + if (field.value.type.base_type == BASE_TYPE_STRING || field.value.type.base_type == BASE_TYPE_VECTOR) gen_vector_pars = true; code += ",\n " + GenTypeWire(field.value.type, " ", true); code += field.name + " = "; if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { @@ -725,7 +725,7 @@ class CppGenerator : public BaseGenerator { code += " return builder_.Finish();\n}\n\n"; //Generate a CreateX function with vector types as parameters - if (vect_pars.size()) { + if (gen_vector_pars) { code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; code += struct_def.name; code += "(flatbuffers::FlatBufferBuilder &_fbb"; @@ -735,11 +735,11 @@ class CppGenerator : public BaseGenerator { if (!field.deprecated) { if (field.value.type.base_type == BASE_TYPE_STRING) { code += ",\n const char *"; - code += field.name + " = \"\""; + code += field.name + " = nullptr"; } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += ",\n std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + "> " + field.name; - code += " = std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">()"; + code += ",\n std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + "> *" + field.name; + code += " = nullptr"; } else { code += ",\n " + GenTypeWire(field.value.type, " ", true); @@ -767,36 +767,26 @@ class CppGenerator : public BaseGenerator { } } code += ") {\n "; - //getting offsets - for (auto it = vect_pars.begin(); - it != vect_pars.end(); ++it) { - auto&field = **it; - code += "auto " + field.name + "_off = "; - if (field.value.type.base_type == BASE_TYPE_STRING) { - code += "_fbb.CreateString(" + field.name + ");\n "; - } - else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += "_fbb.CreateVector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">(" + field.name + ");\n "; + code += "return Create"; + code += struct_def.name; + code += "(_fbb"; + for (auto it = struct_def.fields.vec.begin(); + it != struct_def.fields.vec.end(); ++it) { + auto &field = **it; + if (!field.deprecated) { + if (field.value.type.base_type == BASE_TYPE_STRING) { + code += ", " + field.name + "==nullptr? 0 : "; + code += "_fbb.CreateString(" + field.name + ")"; + } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { + code += ", " + field.name + "==nullptr? 0 : "; + code += "_fbb.CreateVector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">(*" + field.name + ")"; + } else code += ", " + field.name; } } - - code += struct_def.name + "Builder builder_(_fbb);\n"; - for (size_t size = struct_def.sortbysize ? sizeof(largest_scalar_t) : 1; - size; size /= 2) { - for (auto it = struct_def.fields.vec.rbegin(); - it != struct_def.fields.vec.rend(); ++it) { - auto &field = **it; - if (!field.deprecated && (!struct_def.sortbysize || - size == SizeOf(field.value.type.base_type))) { - code += " builder_.add_" + field.name + "("; - code += (field.value.type.base_type == BASE_TYPE_STRING || field.value.type.base_type == BASE_TYPE_VECTOR) ? //if vector or string - (field.name + "_off") : field.name; - code += ");\n"; - } - } - } - code += " return builder_.Finish();\n}\n\n"; + + + code += ");\n}\n\n"; } } From 1661f3a2e8e6f3fafb844e8d5a72f4913a4630f7 Mon Sep 17 00:00:00 2001 From: daksenik Date: Sat, 9 Jul 2016 13:00:21 +0300 Subject: [PATCH 4/5] Added function GenSimpleParam. Tests added. --- src/idl_gen_cpp.cpp | 86 +++++++++++++++------------------- tests/monster_test_generated.h | 39 +++++++++++++++ 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 64dc15871..07db13dbb 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -457,6 +457,30 @@ class CppGenerator : public BaseGenerator { : field.value.constant; } + void GenSimpleParam(std::string &code, FieldDef &field) { + code += ",\n " + GenTypeWire(field.value.type, " ", true); + code += field.name + " = "; + if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { + auto ev = field.value.type.enum_def->ReverseLookup( + static_cast(StringToInt(field.value.constant.c_str())), + false); + if (ev) { + code += WrapInNameSpace( + field.value.type.enum_def->defined_namespace, + GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts)); + } + else { + code += GenUnderlyingCast(field, true, field.value.constant); + } + } + else if (field.value.type.base_type == BASE_TYPE_BOOL) { + code += field.value.constant == "0" ? "false" : "true"; + } + else { + code += GenDefaultConstant(field); + } + } + // Generate an accessor struct, builder structs & function for a table. void GenTable(StructDef &struct_def, std::string *code_ptr) { std::string &code = *code_ptr; @@ -679,9 +703,7 @@ class CppGenerator : public BaseGenerator { // Generate a convenient CreateX function that uses the above builder // to create a table in one go. - bool gen_vector_pars = false; - code += "inline flatbuffers::Offset<" + struct_def.name + "> Create"; code += struct_def.name; code += "(flatbuffers::FlatBufferBuilder &_fbb"; @@ -689,25 +711,11 @@ class CppGenerator : public BaseGenerator { it != struct_def.fields.vec.end(); ++it) { auto &field = **it; if (!field.deprecated) { - if (field.value.type.base_type == BASE_TYPE_STRING || field.value.type.base_type == BASE_TYPE_VECTOR) gen_vector_pars = true; - code += ",\n " + GenTypeWire(field.value.type, " ", true); - code += field.name + " = "; - if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { - auto ev = field.value.type.enum_def->ReverseLookup( - static_cast(StringToInt(field.value.constant.c_str())), - false); - if (ev) { - code += WrapInNameSpace( - field.value.type.enum_def->defined_namespace, - GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts)); - } else { - code += GenUnderlyingCast(field, true, field.value.constant); - } - } else if (field.value.type.base_type == BASE_TYPE_BOOL) { - code += field.value.constant == "0" ? "false" : "true"; - } else { - code += GenDefaultConstant(field); + if (field.value.type.base_type == BASE_TYPE_STRING || + field.value.type.base_type == BASE_TYPE_VECTOR) { + gen_vector_pars = true; } + GenSimpleParam(code, field); } } code += ") {\n " + struct_def.name + "Builder builder_(_fbb);\n"; @@ -738,31 +746,11 @@ class CppGenerator : public BaseGenerator { code += field.name + " = nullptr"; } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += ",\n std::vector<" + GenTypeWire(field.value.type.VectorType(), "", false) + "> *" + field.name; - code += " = nullptr"; - } - else { - code += ",\n " + GenTypeWire(field.value.type, " ", true); - code += field.name + " = "; - if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { - auto ev = field.value.type.enum_def->ReverseLookup( - static_cast(StringToInt(field.value.constant.c_str())), - false); - if (ev) { - code += WrapInNameSpace( - field.value.type.enum_def->defined_namespace, - GetEnumVal(*field.value.type.enum_def, *ev, parser_.opts)); - } - else { - code += GenUnderlyingCast(field, true, field.value.constant); - } - } - else if (field.value.type.base_type == BASE_TYPE_BOOL) { - code += field.value.constant == "0" ? "false" : "true"; - } - else { - code += GenDefaultConstant(field); - } + code += ",\n std::vector<"; + code += GenTypeWire(field.value.type.VectorType(), "", false); + code += "> *" + field.name + " = nullptr"; + } else { + GenSimpleParam(code, field); } } } @@ -776,11 +764,13 @@ class CppGenerator : public BaseGenerator { auto &field = **it; if (!field.deprecated) { if (field.value.type.base_type == BASE_TYPE_STRING) { - code += ", " + field.name + "==nullptr? 0 : "; + code += ", " + field.name + " == nullptr ? 0 : "; code += "_fbb.CreateString(" + field.name + ")"; } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += ", " + field.name + "==nullptr? 0 : "; - code += "_fbb.CreateVector<" + GenTypeWire(field.value.type.VectorType(), "", false) + ">(*" + field.name + ")"; + code += ", " + field.name + " == nullptr ? 0 : "; + code += "_fbb.CreateVector<"; + code += GenTypeWire(field.value.type.VectorType(), "", false); + code += ">(*" + field.name + ")"; } else code += ", " + field.name; } } diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 50fbc28ce..5a60eeb3c 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -215,6 +215,13 @@ inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb return builder_.Finish(); } +inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb, + const char *id = nullptr, + int64_t val = 0, + uint16_t count = 0) { + return CreateStat(_fbb, id == nullptr ? 0 : _fbb.CreateString(id), val, count); +} + /// an example documentation comment: monster object struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum { @@ -457,6 +464,38 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder return builder_.Finish(); } +inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, + const Vec3 *pos = 0, + int16_t mana = 150, + int16_t hp = 100, + const char *name = nullptr, + std::vector *inventory = nullptr, + Color color = Color_Blue, + Any test_type = Any_NONE, + flatbuffers::Offset test = 0, + std::vector *test4 = nullptr, + std::vector> *testarrayofstring = nullptr, + std::vector> *testarrayoftables = nullptr, + flatbuffers::Offset enemy = 0, + std::vector *testnestedflatbuffer = nullptr, + flatbuffers::Offset testempty = 0, + bool testbool = false, + int32_t testhashs32_fnv1 = 0, + uint32_t testhashu32_fnv1 = 0, + int64_t testhashs64_fnv1 = 0, + uint64_t testhashu64_fnv1 = 0, + int32_t testhashs32_fnv1a = 0, + uint32_t testhashu32_fnv1a = 0, + int64_t testhashs64_fnv1a = 0, + uint64_t testhashu64_fnv1a = 0, + std::vector *testarrayofbools = nullptr, + float testf = 3.14159f, + float testf2 = 3.0f, + float testf3 = 0.0f, + std::vector> *testarrayofstring2 = nullptr) { + return CreateMonster(_fbb, pos, mana, hp, name == nullptr ? 0 : _fbb.CreateString(name), inventory == nullptr ? 0 : _fbb.CreateVector(*inventory), color, test_type, test, test4 == nullptr ? 0 : _fbb.CreateVector(*test4), testarrayofstring == nullptr ? 0 : _fbb.CreateVector>(*testarrayofstring), testarrayoftables == nullptr ? 0 : _fbb.CreateVector>(*testarrayoftables), enemy, testnestedflatbuffer == nullptr ? 0 : _fbb.CreateVector(*testnestedflatbuffer), testempty, testbool, testhashs32_fnv1, testhashu32_fnv1, testhashs64_fnv1, testhashu64_fnv1, testhashs32_fnv1a, testhashu32_fnv1a, testhashs64_fnv1a, testhashu64_fnv1a, testarrayofbools == nullptr ? 0 : _fbb.CreateVector(*testarrayofbools), testf, testf2, testf3, testarrayofstring2 == nullptr ? 0 : _fbb.CreateVector>(*testarrayofstring2)); +} + inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type) { switch (type) { case Any_NONE: return true; From aade31b2634ac31598d1a8ae51b671988acb3c94 Mon Sep 17 00:00:00 2001 From: daksenik Date: Mon, 11 Jul 2016 20:27:38 +0300 Subject: [PATCH 5/5] Fixed spaces. Removed redundant == nullptr. Vectors pointers made const. --- src/idl_gen_cpp.cpp | 13 ++-- tests/monster_test_generated.h | 130 ++++++++++++++++----------------- 2 files changed, 70 insertions(+), 73 deletions(-) diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 07db13dbb..b9d5e4c93 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -458,7 +458,7 @@ class CppGenerator : public BaseGenerator { } void GenSimpleParam(std::string &code, FieldDef &field) { - code += ",\n " + GenTypeWire(field.value.type, " ", true); + code += ",\n " + GenTypeWire(field.value.type, " ", true); code += field.name + " = "; if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { auto ev = field.value.type.enum_def->ReverseLookup( @@ -742,11 +742,11 @@ class CppGenerator : public BaseGenerator { auto &field = **it; if (!field.deprecated) { if (field.value.type.base_type == BASE_TYPE_STRING) { - code += ",\n const char *"; + code += ",\n const char *"; code += field.name + " = nullptr"; } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += ",\n std::vector<"; + code += ",\n const std::vector<"; code += GenTypeWire(field.value.type.VectorType(), "", false); code += "> *" + field.name + " = nullptr"; } else { @@ -755,7 +755,6 @@ class CppGenerator : public BaseGenerator { } } code += ") {\n "; - code += "return Create"; code += struct_def.name; code += "(_fbb"; @@ -764,18 +763,16 @@ class CppGenerator : public BaseGenerator { auto &field = **it; if (!field.deprecated) { if (field.value.type.base_type == BASE_TYPE_STRING) { - code += ", " + field.name + " == nullptr ? 0 : "; + code += ", " + field.name + " ? 0 : "; code += "_fbb.CreateString(" + field.name + ")"; } else if (field.value.type.base_type == BASE_TYPE_VECTOR) { - code += ", " + field.name + " == nullptr ? 0 : "; + code += ", " + field.name + " ? 0 : "; code += "_fbb.CreateVector<"; code += GenTypeWire(field.value.type.VectorType(), "", false); code += ">(*" + field.name + ")"; } else code += ", " + field.name; } } - - code += ");\n}\n\n"; } } diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 5a60eeb3c..40e7c4089 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -162,7 +162,7 @@ struct TestSimpleTableWithEnumBuilder { }; inline flatbuffers::Offset CreateTestSimpleTableWithEnum(flatbuffers::FlatBufferBuilder &_fbb, - Color color = Color_Green) { + Color color = Color_Green) { TestSimpleTableWithEnumBuilder builder_(_fbb); builder_.add_color(color); return builder_.Finish(); @@ -205,9 +205,9 @@ struct StatBuilder { }; inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset id = 0, - int64_t val = 0, - uint16_t count = 0) { + flatbuffers::Offset id = 0, + int64_t val = 0, + uint16_t count = 0) { StatBuilder builder_(_fbb); builder_.add_val(val); builder_.add_id(id); @@ -216,10 +216,10 @@ inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb } inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb, - const char *id = nullptr, - int64_t val = 0, - uint16_t count = 0) { - return CreateStat(_fbb, id == nullptr ? 0 : _fbb.CreateString(id), val, count); + const char *id = nullptr, + int64_t val = 0, + uint16_t count = 0) { + return CreateStat(_fbb, id ? 0 : _fbb.CreateString(id), val, count); } /// an example documentation comment: monster object @@ -404,34 +404,34 @@ struct MonsterBuilder { }; inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, - const Vec3 *pos = 0, - int16_t mana = 150, - int16_t hp = 100, - flatbuffers::Offset name = 0, - flatbuffers::Offset> inventory = 0, - Color color = Color_Blue, - Any test_type = Any_NONE, - flatbuffers::Offset test = 0, - flatbuffers::Offset> test4 = 0, - flatbuffers::Offset>> testarrayofstring = 0, - flatbuffers::Offset>> testarrayoftables = 0, - flatbuffers::Offset enemy = 0, - flatbuffers::Offset> testnestedflatbuffer = 0, - flatbuffers::Offset testempty = 0, - bool testbool = false, - int32_t testhashs32_fnv1 = 0, - uint32_t testhashu32_fnv1 = 0, - int64_t testhashs64_fnv1 = 0, - uint64_t testhashu64_fnv1 = 0, - int32_t testhashs32_fnv1a = 0, - uint32_t testhashu32_fnv1a = 0, - int64_t testhashs64_fnv1a = 0, - uint64_t testhashu64_fnv1a = 0, - flatbuffers::Offset> testarrayofbools = 0, - float testf = 3.14159f, - float testf2 = 3.0f, - float testf3 = 0.0f, - flatbuffers::Offset>> testarrayofstring2 = 0) { + const Vec3 *pos = 0, + int16_t mana = 150, + int16_t hp = 100, + flatbuffers::Offset name = 0, + flatbuffers::Offset> inventory = 0, + Color color = Color_Blue, + Any test_type = Any_NONE, + flatbuffers::Offset test = 0, + flatbuffers::Offset> test4 = 0, + flatbuffers::Offset>> testarrayofstring = 0, + flatbuffers::Offset>> testarrayoftables = 0, + flatbuffers::Offset enemy = 0, + flatbuffers::Offset> testnestedflatbuffer = 0, + flatbuffers::Offset testempty = 0, + bool testbool = false, + int32_t testhashs32_fnv1 = 0, + uint32_t testhashu32_fnv1 = 0, + int64_t testhashs64_fnv1 = 0, + uint64_t testhashu64_fnv1 = 0, + int32_t testhashs32_fnv1a = 0, + uint32_t testhashu32_fnv1a = 0, + int64_t testhashs64_fnv1a = 0, + uint64_t testhashu64_fnv1a = 0, + flatbuffers::Offset> testarrayofbools = 0, + float testf = 3.14159f, + float testf2 = 3.0f, + float testf3 = 0.0f, + flatbuffers::Offset>> testarrayofstring2 = 0) { MonsterBuilder builder_(_fbb); builder_.add_testhashu64_fnv1a(testhashu64_fnv1a); builder_.add_testhashs64_fnv1a(testhashs64_fnv1a); @@ -465,35 +465,35 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder } inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, - const Vec3 *pos = 0, - int16_t mana = 150, - int16_t hp = 100, - const char *name = nullptr, - std::vector *inventory = nullptr, - Color color = Color_Blue, - Any test_type = Any_NONE, - flatbuffers::Offset test = 0, - std::vector *test4 = nullptr, - std::vector> *testarrayofstring = nullptr, - std::vector> *testarrayoftables = nullptr, - flatbuffers::Offset enemy = 0, - std::vector *testnestedflatbuffer = nullptr, - flatbuffers::Offset testempty = 0, - bool testbool = false, - int32_t testhashs32_fnv1 = 0, - uint32_t testhashu32_fnv1 = 0, - int64_t testhashs64_fnv1 = 0, - uint64_t testhashu64_fnv1 = 0, - int32_t testhashs32_fnv1a = 0, - uint32_t testhashu32_fnv1a = 0, - int64_t testhashs64_fnv1a = 0, - uint64_t testhashu64_fnv1a = 0, - std::vector *testarrayofbools = nullptr, - float testf = 3.14159f, - float testf2 = 3.0f, - float testf3 = 0.0f, - std::vector> *testarrayofstring2 = nullptr) { - return CreateMonster(_fbb, pos, mana, hp, name == nullptr ? 0 : _fbb.CreateString(name), inventory == nullptr ? 0 : _fbb.CreateVector(*inventory), color, test_type, test, test4 == nullptr ? 0 : _fbb.CreateVector(*test4), testarrayofstring == nullptr ? 0 : _fbb.CreateVector>(*testarrayofstring), testarrayoftables == nullptr ? 0 : _fbb.CreateVector>(*testarrayoftables), enemy, testnestedflatbuffer == nullptr ? 0 : _fbb.CreateVector(*testnestedflatbuffer), testempty, testbool, testhashs32_fnv1, testhashu32_fnv1, testhashs64_fnv1, testhashu64_fnv1, testhashs32_fnv1a, testhashu32_fnv1a, testhashs64_fnv1a, testhashu64_fnv1a, testarrayofbools == nullptr ? 0 : _fbb.CreateVector(*testarrayofbools), testf, testf2, testf3, testarrayofstring2 == nullptr ? 0 : _fbb.CreateVector>(*testarrayofstring2)); + const Vec3 *pos = 0, + int16_t mana = 150, + int16_t hp = 100, + const char *name = nullptr, + const std::vector *inventory = nullptr, + Color color = Color_Blue, + Any test_type = Any_NONE, + flatbuffers::Offset test = 0, + const std::vector *test4 = nullptr, + const std::vector> *testarrayofstring = nullptr, + const std::vector> *testarrayoftables = nullptr, + flatbuffers::Offset enemy = 0, + const std::vector *testnestedflatbuffer = nullptr, + flatbuffers::Offset testempty = 0, + bool testbool = false, + int32_t testhashs32_fnv1 = 0, + uint32_t testhashu32_fnv1 = 0, + int64_t testhashs64_fnv1 = 0, + uint64_t testhashu64_fnv1 = 0, + int32_t testhashs32_fnv1a = 0, + uint32_t testhashu32_fnv1a = 0, + int64_t testhashs64_fnv1a = 0, + uint64_t testhashu64_fnv1a = 0, + const std::vector *testarrayofbools = nullptr, + float testf = 3.14159f, + float testf2 = 3.0f, + float testf3 = 0.0f, + const std::vector> *testarrayofstring2 = nullptr) { + return CreateMonster(_fbb, pos, mana, hp, name ? 0 : _fbb.CreateString(name), inventory ? 0 : _fbb.CreateVector(*inventory), color, test_type, test, test4 ? 0 : _fbb.CreateVector(*test4), testarrayofstring ? 0 : _fbb.CreateVector>(*testarrayofstring), testarrayoftables ? 0 : _fbb.CreateVector>(*testarrayoftables), enemy, testnestedflatbuffer ? 0 : _fbb.CreateVector(*testnestedflatbuffer), testempty, testbool, testhashs32_fnv1, testhashu32_fnv1, testhashs64_fnv1, testhashu64_fnv1, testhashs32_fnv1a, testhashu32_fnv1a, testhashs64_fnv1a, testhashu64_fnv1a, testarrayofbools ? 0 : _fbb.CreateVector(*testarrayofbools), testf, testf2, testf3, testarrayofstring2 ? 0 : _fbb.CreateVector>(*testarrayofstring2)); } inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type) {