: 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.
void GenTable(StructDef &struct_def, std::string *code_ptr) {
std::string &code = *code_ptr;
// 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";
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<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);
+ 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";
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<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);
- }
+ code += ",\n std::vector<";
+ code += GenTypeWire(field.value.type.VectorType(), "", false);
+ code += "> *" + field.name + " = nullptr";
+ } else {
+ GenSimpleParam(code, field);
}
}
}
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;
}
}
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 == nullptr ? 0 : _fbb.CreateString(id), val, count);
+}
+
/// an example documentation comment: monster object
struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
enum {
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,
+ std::vector<uint8_t> *inventory = nullptr,
+ Color color = Color_Blue,
+ Any test_type = Any_NONE,
+ flatbuffers::Offset<void> test = 0,
+ std::vector<const Test *> *test4 = nullptr,
+ std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring = nullptr,
+ std::vector<flatbuffers::Offset<Monster>> *testarrayoftables = nullptr,
+ flatbuffers::Offset<Monster> enemy = 0,
+ 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,
+ std::vector<uint8_t> *testarrayofbools = nullptr,
+ float testf = 3.14159f,
+ float testf2 = 3.0f,
+ float testf3 = 0.0f,
+ std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring2 = nullptr) {
+ return CreateMonster(_fbb, pos, mana, hp, name == nullptr ? 0 : _fbb.CreateString(name), inventory == nullptr ? 0 : _fbb.CreateVector<uint8_t>(*inventory), color, test_type, test, test4 == nullptr ? 0 : _fbb.CreateVector<const Test *>(*test4), testarrayofstring == nullptr ? 0 : _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring), testarrayoftables == nullptr ? 0 : _fbb.CreateVector<flatbuffers::Offset<Monster>>(*testarrayoftables), enemy, testnestedflatbuffer == nullptr ? 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 == nullptr ? 0 : _fbb.CreateVector<uint8_t>(*testarrayofbools), testf, testf2, testf3, testarrayofstring2 == nullptr ? 0 : _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring2));
+}
+
inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type) {
switch (type) {
case Any_NONE: return true;