diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index 9ab36490c..4b3d8f0c5 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -2470,7 +2470,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 int32_t *values; // Only set for non-consecutive enum/union or structs. + const int64_t *values; // Only set for non-consecutive enum/union or structs. const char * const *names; // Only set if compiled with --reflect-names. }; diff --git a/include/flatbuffers/minireflect.h b/include/flatbuffers/minireflect.h index 21cabf380..e3def08df 100644 --- a/include/flatbuffers/minireflect.h +++ b/include/flatbuffers/minireflect.h @@ -88,27 +88,27 @@ inline size_t InlineSize(ElementaryType type, const TypeTable *type_table) { switch (type_table->st) { case ST_TABLE: case ST_UNION: return 4; - case ST_STRUCT: return type_table->values[type_table->num_elems]; + case ST_STRUCT: return static_cast(type_table->values[type_table->num_elems]); default: FLATBUFFERS_ASSERT(false); return 1; } default: FLATBUFFERS_ASSERT(false); return 1; } } -inline int32_t LookupEnum(int32_t enum_val, const int32_t *values, +inline int64_t LookupEnum(int64_t enum_val, const int64_t *values, size_t num_values) { if (!values) return enum_val; for (size_t i = 0; i < num_values; i++) { - if (enum_val == values[i]) return static_cast(i); + if (enum_val == values[i]) return static_cast(i); } return -1; // Unknown enum value. } template const char *EnumName(T tval, const TypeTable *type_table) { if (!type_table || !type_table->names) return nullptr; - auto i = LookupEnum(static_cast(tval), type_table->values, + auto i = LookupEnum(static_cast(tval), type_table->values, type_table->num_elems); - if (i >= 0 && i < static_cast(type_table->num_elems)) { + if (i >= 0 && i < static_cast(type_table->num_elems)) { return type_table->names[i]; } return nullptr; diff --git a/samples/monster_generated.h b/samples/monster_generated.h index 5ac4be38d..07fbd3a40 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -704,7 +704,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() { { flatbuffers::ET_FLOAT, 0, -1 }, { flatbuffers::ET_FLOAT, 0, -1 } }; - static const int32_t values[] = { 0, 4, 8, 12 }; + static const int64_t values[] = { 0, 4, 8, 12 }; static const char * const names[] = { "x", "y", diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 8a42c53e8..888076945 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -863,7 +863,7 @@ class CppGenerator : public BaseGenerator { code_ += " };"; } if (!vs.empty()) { - code_ += " static const int32_t values[] = { {{VALUES}} };"; + code_ += " static const int64_t values[] = { {{VALUES}} };"; } auto has_names = num_fields && parser_.opts.mini_reflect == IDLOptions::kTypesAndNames; diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 4fd499419..7e555cc40 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -2358,7 +2358,7 @@ inline const flatbuffers::TypeTable *ColorTypeTable() { static const flatbuffers::TypeFunction type_refs[] = { ColorTypeTable }; - static const int32_t values[] = { 1, 2, 8 }; + static const int64_t values[] = { 1, 2, 8 }; static const char * const names[] = { "Red", "Green", @@ -2421,7 +2421,7 @@ inline const flatbuffers::TypeTable *TestTypeTable() { { flatbuffers::ET_SHORT, 0, -1 }, { flatbuffers::ET_CHAR, 0, -1 } }; - static const int32_t values[] = { 0, 2, 4 }; + static const int64_t values[] = { 0, 2, 4 }; static const char * const names[] = { "a", "b" @@ -2461,7 +2461,7 @@ inline const flatbuffers::TypeTable *Vec3TypeTable() { ColorTypeTable, TestTypeTable }; - static const int32_t values[] = { 0, 4, 8, 16, 24, 26, 32 }; + static const int64_t values[] = { 0, 4, 8, 16, 24, 26, 32 }; static const char * const names[] = { "x", "y", @@ -2481,7 +2481,7 @@ inline const flatbuffers::TypeTable *AbilityTypeTable() { { flatbuffers::ET_UINT, 0, -1 }, { flatbuffers::ET_UINT, 0, -1 } }; - static const int32_t values[] = { 0, 4, 8 }; + static const int64_t values[] = { 0, 4, 8 }; static const char * const names[] = { "id", "distance" diff --git a/tests/namespace_test/namespace_test1_generated.h b/tests/namespace_test/namespace_test1_generated.h index d82a577c2..247673f7e 100644 --- a/tests/namespace_test/namespace_test1_generated.h +++ b/tests/namespace_test/namespace_test1_generated.h @@ -161,7 +161,7 @@ inline const flatbuffers::TypeTable *StructInNestedNSTypeTable() { { flatbuffers::ET_INT, 0, -1 }, { flatbuffers::ET_INT, 0, -1 } }; - static const int32_t values[] = { 0, 4, 8 }; + static const int64_t values[] = { 0, 4, 8 }; static const char * const names[] = { "a", "b" diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h index c5b2250fd..077e9a0bc 100644 --- a/tests/union_vector/union_vector_generated.h +++ b/tests/union_vector/union_vector_generated.h @@ -718,7 +718,7 @@ inline const flatbuffers::TypeTable *RapunzelTypeTable() { static const flatbuffers::TypeCode type_codes[] = { { flatbuffers::ET_INT, 0, -1 } }; - static const int32_t values[] = { 0, 4 }; + static const int64_t values[] = { 0, 4 }; static const char * const names[] = { "hair_length" }; @@ -732,7 +732,7 @@ inline const flatbuffers::TypeTable *BookReaderTypeTable() { static const flatbuffers::TypeCode type_codes[] = { { flatbuffers::ET_INT, 0, -1 } }; - static const int32_t values[] = { 0, 4 }; + static const int64_t values[] = { 0, 4 }; static const char * const names[] = { "books_read" };