diff --git a/include/flatbuffers/reflection_generated.h b/include/flatbuffers/reflection_generated.h index cd5cbc211..dcb0f7e05 100644 --- a/include/flatbuffers/reflection_generated.h +++ b/include/flatbuffers/reflection_generated.h @@ -1413,6 +1413,11 @@ inline bool SchemaBufferHasIdentifier(const void *buf) { buf, SchemaIdentifier()); } +inline bool SizePrefixedSchemaBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, SchemaIdentifier(), true); +} + inline bool VerifySchemaBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(SchemaIdentifier()); diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index e4ebff24c..a14ac77ad 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -535,6 +535,14 @@ class CppGenerator : public BaseGenerator { code_ += " buf, {{STRUCT_NAME}}Identifier());"; code_ += "}"; code_ += ""; + + // Check if a size-prefixed buffer has the identifier. + code_ += "inline \\"; + code_ += "bool SizePrefixed{{STRUCT_NAME}}BufferHasIdentifier(const void *buf) {"; + code_ += " return flatbuffers::BufferHasIdentifier("; + code_ += " buf, {{STRUCT_NAME}}Identifier(), true);"; + code_ += "}"; + code_ += ""; } // The root verifier. diff --git a/tests/arrays_test_generated.h b/tests/arrays_test_generated.h index d5680700e..007a5f5b9 100644 --- a/tests/arrays_test_generated.h +++ b/tests/arrays_test_generated.h @@ -470,6 +470,11 @@ inline bool ArrayTableBufferHasIdentifier(const void *buf) { buf, ArrayTableIdentifier()); } +inline bool SizePrefixedArrayTableBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, ArrayTableIdentifier(), true); +} + inline bool VerifyArrayTableBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(ArrayTableIdentifier()); diff --git a/tests/cpp17/generated_cpp17/monster_test_generated.h b/tests/cpp17/generated_cpp17/monster_test_generated.h index 1a6f569ea..ad09dacc1 100644 --- a/tests/cpp17/generated_cpp17/monster_test_generated.h +++ b/tests/cpp17/generated_cpp17/monster_test_generated.h @@ -3727,6 +3727,11 @@ inline bool MonsterBufferHasIdentifier(const void *buf) { buf, MonsterIdentifier()); } +inline bool SizePrefixedMonsterBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, MonsterIdentifier(), true); +} + inline bool VerifyMonsterBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(MonsterIdentifier()); diff --git a/tests/cpp17/generated_cpp17/optional_scalars_generated.h b/tests/cpp17/generated_cpp17/optional_scalars_generated.h index 739507779..24b5ccd76 100644 --- a/tests/cpp17/generated_cpp17/optional_scalars_generated.h +++ b/tests/cpp17/generated_cpp17/optional_scalars_generated.h @@ -946,6 +946,11 @@ inline bool ScalarStuffBufferHasIdentifier(const void *buf) { buf, ScalarStuffIdentifier()); } +inline bool SizePrefixedScalarStuffBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, ScalarStuffIdentifier(), true); +} + inline bool VerifyScalarStuffBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(ScalarStuffIdentifier()); diff --git a/tests/cpp17/generated_cpp17/union_vector_generated.h b/tests/cpp17/generated_cpp17/union_vector_generated.h index a61791327..aa0daf838 100644 --- a/tests/cpp17/generated_cpp17/union_vector_generated.h +++ b/tests/cpp17/generated_cpp17/union_vector_generated.h @@ -1214,6 +1214,11 @@ inline bool MovieBufferHasIdentifier(const void *buf) { buf, MovieIdentifier()); } +inline bool SizePrefixedMovieBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, MovieIdentifier(), true); +} + inline bool VerifyMovieBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(MovieIdentifier()); diff --git a/tests/monster_extra_generated.h b/tests/monster_extra_generated.h index 4cfe719d7..b27e092ea 100644 --- a/tests/monster_extra_generated.h +++ b/tests/monster_extra_generated.h @@ -362,6 +362,11 @@ inline bool MonsterExtraBufferHasIdentifier(const void *buf) { buf, MonsterExtraIdentifier()); } +inline bool SizePrefixedMonsterExtraBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, MonsterExtraIdentifier(), true); +} + inline bool VerifyMonsterExtraBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(MonsterExtraIdentifier()); diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 1d96baee3..cbcbf960c 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -3698,6 +3698,11 @@ inline bool MonsterBufferHasIdentifier(const void *buf) { buf, MonsterIdentifier()); } +inline bool SizePrefixedMonsterBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, MonsterIdentifier(), true); +} + inline bool VerifyMonsterBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(MonsterIdentifier()); diff --git a/tests/optional_scalars_generated.h b/tests/optional_scalars_generated.h index 724c0ebd8..c295ebac1 100644 --- a/tests/optional_scalars_generated.h +++ b/tests/optional_scalars_generated.h @@ -906,6 +906,11 @@ inline bool ScalarStuffBufferHasIdentifier(const void *buf) { buf, ScalarStuffIdentifier()); } +inline bool SizePrefixedScalarStuffBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, ScalarStuffIdentifier(), true); +} + inline bool VerifyScalarStuffBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(ScalarStuffIdentifier()); diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h index 489ac94ed..e08df6a7c 100644 --- a/tests/union_vector/union_vector_generated.h +++ b/tests/union_vector/union_vector_generated.h @@ -1267,6 +1267,11 @@ inline bool MovieBufferHasIdentifier(const void *buf) { buf, MovieIdentifier()); } +inline bool SizePrefixedMovieBufferHasIdentifier(const void *buf) { + return flatbuffers::BufferHasIdentifier( + buf, MovieIdentifier(), true); +} + inline bool VerifyMovieBuffer( flatbuffers::Verifier &verifier) { return verifier.VerifyBuffer(MovieIdentifier());