mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-05 13:08:58 +00:00
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:
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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_ += " };";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user