mirror of
https://github.com/google/flatbuffers.git
synced 2026-07-01 20:53:57 +00:00
Merge pull request #3923 from daksenik/master
Fixed operator++. Added CreateXXX for vector types.
This commit is contained in:
@@ -288,7 +288,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
VectorIterator operator++(int) {
|
VectorIterator operator++(int) {
|
||||||
VectorIterator temp(data_);
|
VectorIterator temp(data_,0);
|
||||||
data_ += IndirectHelper<T>::element_stride;
|
data_ += IndirectHelper<T>::element_stride;
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -458,6 +458,30 @@ class CppGenerator : public BaseGenerator {
|
|||||||
: field.value.constant;
|
: 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<int>(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.
|
// Generate an accessor struct, builder structs & function for a table.
|
||||||
void GenTable(StructDef &struct_def, std::string *code_ptr) {
|
void GenTable(StructDef &struct_def, std::string *code_ptr) {
|
||||||
std::string &code = *code_ptr;
|
std::string &code = *code_ptr;
|
||||||
@@ -680,6 +704,7 @@ class CppGenerator : public BaseGenerator {
|
|||||||
|
|
||||||
// Generate a convenient CreateX function that uses the above builder
|
// Generate a convenient CreateX function that uses the above builder
|
||||||
// to create a table in one go.
|
// to create a table in one go.
|
||||||
|
bool gen_vector_pars = false;
|
||||||
code += "inline flatbuffers::Offset<" + struct_def.name + "> Create";
|
code += "inline flatbuffers::Offset<" + struct_def.name + "> Create";
|
||||||
code += struct_def.name;
|
code += struct_def.name;
|
||||||
code += "(flatbuffers::FlatBufferBuilder &_fbb";
|
code += "(flatbuffers::FlatBufferBuilder &_fbb";
|
||||||
@@ -687,24 +712,11 @@ class CppGenerator : public BaseGenerator {
|
|||||||
it != struct_def.fields.vec.end(); ++it) {
|
it != struct_def.fields.vec.end(); ++it) {
|
||||||
auto &field = **it;
|
auto &field = **it;
|
||||||
if (!field.deprecated) {
|
if (!field.deprecated) {
|
||||||
code += ",\n " + GenTypeWire(field.value.type, " ", true);
|
if (field.value.type.base_type == BASE_TYPE_STRING ||
|
||||||
code += field.name + " = ";
|
field.value.type.base_type == BASE_TYPE_VECTOR) {
|
||||||
if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) {
|
gen_vector_pars = true;
|
||||||
auto ev = field.value.type.enum_def->ReverseLookup(
|
|
||||||
static_cast<int>(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);
|
|
||||||
}
|
}
|
||||||
|
GenSimpleParam(code, field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
code += ") {\n " + struct_def.name + "Builder builder_(_fbb);\n";
|
code += ") {\n " + struct_def.name + "Builder builder_(_fbb);\n";
|
||||||
@@ -720,6 +732,50 @@ class CppGenerator : public BaseGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
code += " return builder_.Finish();\n}\n\n";
|
code += " return builder_.Finish();\n}\n\n";
|
||||||
|
|
||||||
|
//Generate a CreateX function with vector types as parameters
|
||||||
|
if (gen_vector_pars) {
|
||||||
|
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 + " = nullptr";
|
||||||
|
}
|
||||||
|
else if (field.value.type.base_type == BASE_TYPE_VECTOR) {
|
||||||
|
code += ",\n const std::vector<";
|
||||||
|
code += GenTypeWire(field.value.type.VectorType(), "", false);
|
||||||
|
code += "> *" + field.name + " = nullptr";
|
||||||
|
} else {
|
||||||
|
GenSimpleParam(code, field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
code += ") {\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 + " ? 0 : ";
|
||||||
|
code += "_fbb.CreateString(" + field.name + ")";
|
||||||
|
} else if (field.value.type.base_type == BASE_TYPE_VECTOR) {
|
||||||
|
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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GenPadding(const FieldDef &field, std::string &code,
|
static void GenPadding(const FieldDef &field, std::string &code,
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ struct TestSimpleTableWithEnumBuilder {
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<TestSimpleTableWithEnum> CreateTestSimpleTableWithEnum(flatbuffers::FlatBufferBuilder &_fbb,
|
inline flatbuffers::Offset<TestSimpleTableWithEnum> CreateTestSimpleTableWithEnum(flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
Color color = Color_Green) {
|
Color color = Color_Green) {
|
||||||
TestSimpleTableWithEnumBuilder builder_(_fbb);
|
TestSimpleTableWithEnumBuilder builder_(_fbb);
|
||||||
builder_.add_color(color);
|
builder_.add_color(color);
|
||||||
return builder_.Finish();
|
return builder_.Finish();
|
||||||
@@ -205,9 +205,9 @@ struct StatBuilder {
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb,
|
inline flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
flatbuffers::Offset<flatbuffers::String> id = 0,
|
flatbuffers::Offset<flatbuffers::String> id = 0,
|
||||||
int64_t val = 0,
|
int64_t val = 0,
|
||||||
uint16_t count = 0) {
|
uint16_t count = 0) {
|
||||||
StatBuilder builder_(_fbb);
|
StatBuilder builder_(_fbb);
|
||||||
builder_.add_val(val);
|
builder_.add_val(val);
|
||||||
builder_.add_id(id);
|
builder_.add_id(id);
|
||||||
@@ -215,6 +215,13 @@ inline flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb
|
|||||||
return builder_.Finish();
|
return builder_.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
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
|
/// an example documentation comment: monster object
|
||||||
struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||||
enum {
|
enum {
|
||||||
@@ -397,34 +404,34 @@ struct MonsterBuilder {
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
|
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
const Vec3 *pos = 0,
|
const Vec3 *pos = 0,
|
||||||
int16_t mana = 150,
|
int16_t mana = 150,
|
||||||
int16_t hp = 100,
|
int16_t hp = 100,
|
||||||
flatbuffers::Offset<flatbuffers::String> name = 0,
|
flatbuffers::Offset<flatbuffers::String> name = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory = 0,
|
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory = 0,
|
||||||
Color color = Color_Blue,
|
Color color = Color_Blue,
|
||||||
Any test_type = Any_NONE,
|
Any test_type = Any_NONE,
|
||||||
flatbuffers::Offset<void> test = 0,
|
flatbuffers::Offset<void> test = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<const Test *>> test4 = 0,
|
flatbuffers::Offset<flatbuffers::Vector<const Test *>> test4 = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0,
|
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables = 0,
|
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Monster>>> testarrayoftables = 0,
|
||||||
flatbuffers::Offset<Monster> enemy = 0,
|
flatbuffers::Offset<Monster> enemy = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0,
|
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0,
|
||||||
flatbuffers::Offset<Stat> testempty = 0,
|
flatbuffers::Offset<Stat> testempty = 0,
|
||||||
bool testbool = false,
|
bool testbool = false,
|
||||||
int32_t testhashs32_fnv1 = 0,
|
int32_t testhashs32_fnv1 = 0,
|
||||||
uint32_t testhashu32_fnv1 = 0,
|
uint32_t testhashu32_fnv1 = 0,
|
||||||
int64_t testhashs64_fnv1 = 0,
|
int64_t testhashs64_fnv1 = 0,
|
||||||
uint64_t testhashu64_fnv1 = 0,
|
uint64_t testhashu64_fnv1 = 0,
|
||||||
int32_t testhashs32_fnv1a = 0,
|
int32_t testhashs32_fnv1a = 0,
|
||||||
uint32_t testhashu32_fnv1a = 0,
|
uint32_t testhashu32_fnv1a = 0,
|
||||||
int64_t testhashs64_fnv1a = 0,
|
int64_t testhashs64_fnv1a = 0,
|
||||||
uint64_t testhashu64_fnv1a = 0,
|
uint64_t testhashu64_fnv1a = 0,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools = 0,
|
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools = 0,
|
||||||
float testf = 3.14159f,
|
float testf = 3.14159f,
|
||||||
float testf2 = 3.0f,
|
float testf2 = 3.0f,
|
||||||
float testf3 = 0.0f,
|
float testf3 = 0.0f,
|
||||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring2 = 0) {
|
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring2 = 0) {
|
||||||
MonsterBuilder builder_(_fbb);
|
MonsterBuilder builder_(_fbb);
|
||||||
builder_.add_testhashu64_fnv1a(testhashu64_fnv1a);
|
builder_.add_testhashu64_fnv1a(testhashu64_fnv1a);
|
||||||
builder_.add_testhashs64_fnv1a(testhashs64_fnv1a);
|
builder_.add_testhashs64_fnv1a(testhashs64_fnv1a);
|
||||||
@@ -457,6 +464,38 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
|
|||||||
return builder_.Finish();
|
return builder_.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
|
const Vec3 *pos = 0,
|
||||||
|
int16_t mana = 150,
|
||||||
|
int16_t hp = 100,
|
||||||
|
const char *name = nullptr,
|
||||||
|
const std::vector<uint8_t> *inventory = nullptr,
|
||||||
|
Color color = Color_Blue,
|
||||||
|
Any test_type = Any_NONE,
|
||||||
|
flatbuffers::Offset<void> test = 0,
|
||||||
|
const std::vector<const Test *> *test4 = nullptr,
|
||||||
|
const std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring = nullptr,
|
||||||
|
const std::vector<flatbuffers::Offset<Monster>> *testarrayoftables = nullptr,
|
||||||
|
flatbuffers::Offset<Monster> enemy = 0,
|
||||||
|
const std::vector<uint8_t> *testnestedflatbuffer = nullptr,
|
||||||
|
flatbuffers::Offset<Stat> 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<uint8_t> *testarrayofbools = nullptr,
|
||||||
|
float testf = 3.14159f,
|
||||||
|
float testf2 = 3.0f,
|
||||||
|
float testf3 = 0.0f,
|
||||||
|
const std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring2 = nullptr) {
|
||||||
|
return CreateMonster(_fbb, pos, mana, hp, name ? 0 : _fbb.CreateString(name), inventory ? 0 : _fbb.CreateVector<uint8_t>(*inventory), color, test_type, test, test4 ? 0 : _fbb.CreateVector<const Test *>(*test4), testarrayofstring ? 0 : _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring), testarrayoftables ? 0 : _fbb.CreateVector<flatbuffers::Offset<Monster>>(*testarrayoftables), enemy, testnestedflatbuffer ? 0 : _fbb.CreateVector<uint8_t>(*testnestedflatbuffer), testempty, testbool, testhashs32_fnv1, testhashu32_fnv1, testhashs64_fnv1, testhashu64_fnv1, testhashs32_fnv1a, testhashu32_fnv1a, testhashs64_fnv1a, testhashu64_fnv1a, testarrayofbools ? 0 : _fbb.CreateVector<uint8_t>(*testarrayofbools), testf, testf2, testf3, testarrayofstring2 ? 0 : _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring2));
|
||||||
|
}
|
||||||
|
|
||||||
inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type) {
|
inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Any_NONE: return true;
|
case Any_NONE: return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user