Minireflect fixed array (#6129)

* CMakeLists: also really generate optional_scalars as needed by test elsewhere

* [C++] Handle fixed-length array in minireflection

Fixes #6128
This commit is contained in:
Mark Nauwelaerts
2020-09-23 02:57:01 +02:00
committed by GitHub
parent 96d5e35977
commit 34d67b425e
16 changed files with 127 additions and 73 deletions

View File

@@ -478,6 +478,7 @@ if(FLATBUFFERS_BUILD_TESTS)
compile_flatbuffers_schema_to_cpp(tests/namespace_test/namespace_test1.fbs)
compile_flatbuffers_schema_to_cpp(tests/namespace_test/namespace_test2.fbs)
compile_flatbuffers_schema_to_cpp(tests/union_vector/union_vector.fbs)
compile_flatbuffers_schema_to_cpp(tests/optional_scalars.fbs)
compile_flatbuffers_schema_to_cpp_opt(tests/native_type_test.fbs "")
compile_flatbuffers_schema_to_cpp_opt(tests/arrays_test.fbs "--scoped-enums;--gen-compare")
compile_flatbuffers_schema_to_binary(tests/arrays_test.fbs)

View File

@@ -2747,7 +2747,7 @@ inline const char * const *ElementaryTypeNames() {
// Basic type info cost just 16bits per field!
struct TypeCode {
uint16_t base_type : 4; // ElementaryType
uint16_t is_vector : 1;
uint16_t is_repeating : 1; // Either vector (in table) or array (in struct)
int16_t sequence_ref : 11; // Index into type_refs below, or -1 for none.
};
@@ -2763,6 +2763,7 @@ struct TypeTable {
size_t num_elems; // of type_codes, values, names (but not type_refs).
const TypeCode *type_codes; // num_elems count
const TypeFunction *type_refs; // less than num_elems entries (see TypeCode).
const int16_t *array_sizes; // less than num_elems entries (see TypeCode).
const int64_t *values; // Only set for non-consecutive enum/union or structs.
const char *const *names; // Only set if compiled with --reflect-names.
};

View File

@@ -234,10 +234,11 @@ inline void IterateObject(const uint8_t *obj, const TypeTable *type_table,
visitor->StartSequence();
const uint8_t *prev_val = nullptr;
size_t set_idx = 0;
size_t array_idx = 0;
for (size_t i = 0; i < type_table->num_elems; i++) {
auto type_code = type_table->type_codes[i];
auto type = static_cast<ElementaryType>(type_code.base_type);
auto is_vector = type_code.is_vector != 0;
auto is_repeating = type_code.is_repeating != 0;
auto ref_idx = type_code.sequence_ref;
const TypeTable *ref = nullptr;
if (ref_idx >= 0) { ref = type_table->type_refs[ref_idx](); }
@@ -249,15 +250,25 @@ inline void IterateObject(const uint8_t *obj, const TypeTable *type_table,
} else {
val = obj + type_table->values[i];
}
visitor->Field(i, set_idx, type, is_vector, ref, name, val);
visitor->Field(i, set_idx, type, is_repeating, ref, name, val);
if (val) {
set_idx++;
if (is_vector) {
val += ReadScalar<uoffset_t>(val);
auto vec = reinterpret_cast<const Vector<uint8_t> *>(val);
if (is_repeating) {
auto elem_ptr = val;
size_t size = 0;
if (type_table->st == ST_TABLE) {
// variable length vector
val += ReadScalar<uoffset_t>(val);
auto vec = reinterpret_cast<const Vector<uint8_t> *>(val);
elem_ptr = vec->Data();
size = vec->size();
} else {
// otherwise fixed size array
size = type_table->array_sizes[array_idx];
++array_idx;
}
visitor->StartVector();
auto elem_ptr = vec->Data();
for (size_t j = 0; j < vec->size(); j++) {
for (size_t j = 0; j < size; j++) {
visitor->Element(j, type, ref, elem_ptr);
IterateValue(type, elem_ptr, ref, prev_val, static_cast<soffset_t>(j),
visitor);

View File

@@ -733,7 +733,7 @@ inline const flatbuffers::TypeTable *ColorTypeTable() {
"Blue"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -751,7 +751,7 @@ inline const flatbuffers::TypeTable *EquipmentTypeTable() {
"Weapon"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -769,7 +769,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() {
"z"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 3, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 3, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -808,7 +808,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable() {
"path"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 11, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 11, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -823,7 +823,7 @@ inline const flatbuffers::TypeTable *WeaponTypeTable() {
"damage"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 2, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 2, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -954,11 +954,13 @@ class CppGenerator : public BaseGenerator {
}
std::string ts;
std::vector<std::string> type_refs;
std::vector<uint16_t> array_sizes;
for (auto it = types.begin(); it != types.end(); ++it) {
auto &type = *it;
if (!ts.empty()) ts += ",\n ";
auto is_vector = type.base_type == BASE_TYPE_VECTOR;
auto bt = is_vector ? type.element : type.base_type;
auto is_array = type.base_type == BASE_TYPE_ARRAY;
auto bt = is_vector || is_array ? type.element : type.base_type;
auto et = IsScalar(bt) || bt == BASE_TYPE_STRING
? bt - BASE_TYPE_UTYPE + ET_UTYPE
: ET_SEQUENCE;
@@ -980,14 +982,21 @@ class CppGenerator : public BaseGenerator {
type_refs.push_back(ref_name);
}
}
if (is_array) { array_sizes.push_back(type.fixed_length); }
ts += "{ flatbuffers::" + std::string(ElementaryTypeNames()[et]) + ", " +
NumToString(is_vector) + ", " + NumToString(ref_idx) + " }";
NumToString(is_vector || is_array) + ", " + NumToString(ref_idx) +
" }";
}
std::string rs;
for (auto it = type_refs.begin(); it != type_refs.end(); ++it) {
if (!rs.empty()) rs += ",\n ";
rs += *it + "TypeTable";
}
std::string as;
for (auto it = array_sizes.begin(); it != array_sizes.end(); ++it) {
as += NumToString(*it);
as += ", ";
}
std::string ns;
for (auto it = names.begin(); it != names.end(); ++it) {
if (!ns.empty()) ns += ",\n ";
@@ -1016,6 +1025,7 @@ class CppGenerator : public BaseGenerator {
}
code_.SetValue("TYPES", ts);
code_.SetValue("REFS", rs);
code_.SetValue("ARRAYSIZES", as);
code_.SetValue("NAMES", ns);
code_.SetValue("VALUES", vs);
code_ += "inline const flatbuffers::TypeTable *{{NAME}}TypeTable() {";
@@ -1029,6 +1039,9 @@ class CppGenerator : public BaseGenerator {
code_ += " {{REFS}}";
code_ += " };";
}
if (!as.empty()) {
code_ += " static const int16_t array_sizes[] = { {{ARRAYSIZES}} };";
}
if (!vs.empty()) {
// Problem with uint64_t values greater than 9223372036854775807ULL.
code_ += " static const int64_t values[] = { {{VALUES}} };";
@@ -1044,6 +1057,7 @@ class CppGenerator : public BaseGenerator {
code_ += std::string(" flatbuffers::{{SEQ_TYPE}}, {{NUM_FIELDS}}, ") +
(num_fields ? "type_codes, " : "nullptr, ") +
(!type_refs.empty() ? "type_refs, " : "nullptr, ") +
(!as.empty() ? "array_sizes, " : "nullptr, ") +
(!vs.empty() ? "values, " : "nullptr, ") +
(has_names ? "names" : "nullptr");
code_ += " };";

View File

@@ -341,21 +341,22 @@ inline const flatbuffers::TypeTable *TestEnumTypeTable() {
"C"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
inline const flatbuffers::TypeTable *NestedStructTypeTable() {
static const flatbuffers::TypeCode type_codes[] = {
{ flatbuffers::ET_SEQUENCE, 0, -1 },
{ flatbuffers::ET_INT, 1, -1 },
{ flatbuffers::ET_CHAR, 0, 0 },
{ flatbuffers::ET_SEQUENCE, 0, 0 },
{ flatbuffers::ET_SEQUENCE, 0, -1 }
{ flatbuffers::ET_CHAR, 1, 0 },
{ flatbuffers::ET_LONG, 1, -1 }
};
static const flatbuffers::TypeFunction type_refs[] = {
MyGame::Example::TestEnumTypeTable
};
static const int16_t array_sizes[] = { 2, 2, 2, };
static const int64_t values[] = { 0, 8, 9, 16, 32 };
static const char * const names[] = {
"a",
@@ -364,7 +365,7 @@ inline const flatbuffers::TypeTable *NestedStructTypeTable() {
"d"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 4, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 4, type_codes, type_refs, array_sizes, values, names
};
return &tt;
}
@@ -372,15 +373,16 @@ inline const flatbuffers::TypeTable *NestedStructTypeTable() {
inline const flatbuffers::TypeTable *ArrayStructTypeTable() {
static const flatbuffers::TypeCode type_codes[] = {
{ flatbuffers::ET_FLOAT, 0, -1 },
{ flatbuffers::ET_SEQUENCE, 0, -1 },
{ flatbuffers::ET_INT, 1, -1 },
{ flatbuffers::ET_CHAR, 0, -1 },
{ flatbuffers::ET_SEQUENCE, 0, 0 },
{ flatbuffers::ET_SEQUENCE, 1, 0 },
{ flatbuffers::ET_INT, 0, -1 },
{ flatbuffers::ET_SEQUENCE, 0, -1 }
{ flatbuffers::ET_LONG, 1, -1 }
};
static const flatbuffers::TypeFunction type_refs[] = {
MyGame::Example::NestedStructTypeTable
};
static const int16_t array_sizes[] = { 15, 2, 2, };
static const int64_t values[] = { 0, 4, 64, 72, 136, 144, 160 };
static const char * const names[] = {
"a",
@@ -391,7 +393,7 @@ inline const flatbuffers::TypeTable *ArrayStructTypeTable() {
"f"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, array_sizes, values, names
};
return &tt;
}
@@ -407,7 +409,7 @@ inline const flatbuffers::TypeTable *ArrayTableTypeTable() {
"a"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -2867,7 +2867,7 @@ inline const flatbuffers::TypeTable *ColorTypeTable() {
"Blue"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -2890,7 +2890,7 @@ inline const flatbuffers::TypeTable *RaceTypeTable() {
"Elf"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 4, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 4, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -2914,7 +2914,7 @@ inline const flatbuffers::TypeTable *AnyTypeTable() {
"MyGame_Example2_Monster"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -2938,7 +2938,7 @@ inline const flatbuffers::TypeTable *AnyUniqueAliasesTypeTable() {
"M2"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -2960,7 +2960,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
"M3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -2969,7 +2969,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
inline const flatbuffers::TypeTable *InParentNamespaceTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -2978,7 +2978,7 @@ namespace Example2 {
inline const flatbuffers::TypeTable *MonsterTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -2998,7 +2998,7 @@ inline const flatbuffers::TypeTable *TestTypeTable() {
"b"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3014,7 +3014,7 @@ inline const flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable() {
"color"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3042,7 +3042,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() {
"test3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3058,7 +3058,7 @@ inline const flatbuffers::TypeTable *AbilityTypeTable() {
"distance"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3075,7 +3075,7 @@ inline const flatbuffers::TypeTable *StatTypeTable() {
"count"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3088,7 +3088,7 @@ inline const flatbuffers::TypeTable *ReferrableTypeTable() {
"id"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3211,7 +3211,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable() {
"signed_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3246,7 +3246,7 @@ inline const flatbuffers::TypeTable *TypeAliasesTypeTable() {
"vf64"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -725,7 +725,7 @@ inline const flatbuffers::TypeTable *OptionalByteTypeTable() {
"One"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -809,7 +809,7 @@ inline const flatbuffers::TypeTable *ScalarStuffTypeTable() {
"default_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -341,7 +341,7 @@ inline const flatbuffers::TypeTable *MonsterExtraTypeTable() {
"deprec"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 11, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 11, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -3149,7 +3149,7 @@ inline const flatbuffers::TypeTable *ColorTypeTable() {
"Blue"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3172,7 +3172,7 @@ inline const flatbuffers::TypeTable *RaceTypeTable() {
"Elf"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 4, type_codes, type_refs, values, names
flatbuffers::ST_ENUM, 4, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3196,7 +3196,7 @@ inline const flatbuffers::TypeTable *AnyTypeTable() {
"MyGame_Example2_Monster"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3220,7 +3220,7 @@ inline const flatbuffers::TypeTable *AnyUniqueAliasesTypeTable() {
"M2"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3242,7 +3242,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
"M3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3251,7 +3251,7 @@ inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
inline const flatbuffers::TypeTable *InParentNamespaceTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -3260,7 +3260,7 @@ namespace Example2 {
inline const flatbuffers::TypeTable *MonsterTypeTable() {
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr
flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
};
return &tt;
}
@@ -3280,7 +3280,7 @@ inline const flatbuffers::TypeTable *TestTypeTable() {
"b"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3296,7 +3296,7 @@ inline const flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable() {
"color"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3324,7 +3324,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() {
"test3"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, values, names
flatbuffers::ST_STRUCT, 6, type_codes, type_refs, nullptr, values, names
};
return &tt;
}
@@ -3340,7 +3340,7 @@ inline const flatbuffers::TypeTable *AbilityTypeTable() {
"distance"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -3357,7 +3357,7 @@ inline const flatbuffers::TypeTable *StatTypeTable() {
"count"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3370,7 +3370,7 @@ inline const flatbuffers::TypeTable *ReferrableTypeTable() {
"id"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -3493,7 +3493,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable() {
"signed_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 49, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -3528,7 +3528,7 @@ inline const flatbuffers::TypeTable *TypeAliasesTypeTable() {
"vf64"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -221,7 +221,7 @@ inline const flatbuffers::TypeTable *EnumInNestedNSTypeTable() {
"C"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -234,7 +234,7 @@ inline const flatbuffers::TypeTable *TableInNestedNSTypeTable() {
"foo"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -250,7 +250,7 @@ inline const flatbuffers::TypeTable *StructInNestedNSTypeTable() {
"b"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
};
return &tt;
}

View File

@@ -455,7 +455,7 @@ inline const flatbuffers::TypeTable *TableInFirstNSTypeTable() {
"foo_struct"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -478,7 +478,7 @@ inline const flatbuffers::TypeTable *TableInCTypeTable() {
"refer_to_a2"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -498,7 +498,7 @@ inline const flatbuffers::TypeTable *SecondTableInATypeTable() {
"refer_to_c"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -170,7 +170,7 @@ inline const flatbuffers::TypeTable *Vector3DTypeTable() {
"z"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 3, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 3, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -186,7 +186,7 @@ inline const flatbuffers::TypeTable *ApplicationDataTypeTable() {
"vectors"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -803,7 +803,7 @@ inline const flatbuffers::TypeTable *OptionalByteTypeTable() {
"One"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, names
flatbuffers::ST_ENUM, 2, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -887,7 +887,7 @@ inline const flatbuffers::TypeTable *ScalarStuffTypeTable() {
"default_enum"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 35, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}

View File

@@ -1108,6 +1108,30 @@ void MiniReflectFlatBuffersTest(uint8_t *flatbuf) {
"16, b: 32 } }");
}
void MiniReflectFixedLengthArrayTest() {
// VS10 does not support typed enums, exclude from tests
#if !defined(_MSC_VER) || _MSC_VER >= 1700
flatbuffers::FlatBufferBuilder fbb;
MyGame::Example::ArrayStruct aStruct(2, 12, 1);
auto aTable = MyGame::Example::CreateArrayTable(fbb, &aStruct);
fbb.Finish(aTable);
auto flatbuf = fbb.Release();
auto s = flatbuffers::FlatBufferToString(
flatbuf.data(), MyGame::Example::ArrayTableTypeTable());
TEST_EQ_STR(
"{ "
"a: { a: 2.0, "
"b: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "
"c: 12, "
"d: [ { a: [ 0, 0 ], b: A, c: [ A, A ], d: [ 0, 0 ] }, "
"{ a: [ 0, 0 ], b: A, c: [ A, A ], d: [ 0, 0 ] } ], "
"e: 1, f: [ 0, 0 ] } "
"}",
s.c_str());
#endif
}
// Parse a .proto schema, output as .fbs
void ParseProtoTest() {
// load the .proto and the golden file from disk
@@ -3566,6 +3590,7 @@ int FlatBufferTests() {
ObjectFlatBuffersTest(flatbuf.data());
MiniReflectFlatBuffersTest(flatbuf.data());
MiniReflectFixedLengthArrayTest();
SizePrefixedTest();

View File

@@ -752,7 +752,7 @@ inline const flatbuffers::TypeTable *CharacterTypeTable() {
"Unused"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_UNION, 7, type_codes, type_refs, nullptr, names
flatbuffers::ST_UNION, 7, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}
@@ -765,7 +765,7 @@ inline const flatbuffers::TypeTable *AttackerTypeTable() {
"sword_attack_damage"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
};
return &tt;
}
@@ -779,7 +779,7 @@ inline const flatbuffers::TypeTable *RapunzelTypeTable() {
"hair_length"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -793,7 +793,7 @@ inline const flatbuffers::TypeTable *BookReaderTypeTable() {
"books_read"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names
flatbuffers::ST_STRUCT, 1, type_codes, nullptr, nullptr, values, names
};
return &tt;
}
@@ -815,7 +815,7 @@ inline const flatbuffers::TypeTable *MovieTypeTable() {
"characters"
};
static const flatbuffers::TypeTable tt = {
flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names
flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, nullptr, names
};
return &tt;
}