mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-16 01:07:29 +00:00
[C++] Adds basic schema evolution tests (#5611)
* Added basic schema evolution tests * Add BUILD targets for evolution tests. Added to test/generate_code scripts * Use vector.front() instead of vector.data() * Added --scoped-enums option for evolution test
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
adbcbba5d1
commit
dda095023d
453
tests/evolution_test/evolution_v1_generated.h
Normal file
453
tests/evolution_test/evolution_v1_generated.h
Normal file
@@ -0,0 +1,453 @@
|
||||
// automatically generated by the FlatBuffers compiler, do not modify
|
||||
|
||||
|
||||
#ifndef FLATBUFFERS_GENERATED_EVOLUTIONV1_EVOLUTION_V1_H_
|
||||
#define FLATBUFFERS_GENERATED_EVOLUTIONV1_EVOLUTION_V1_H_
|
||||
|
||||
#include "flatbuffers/flatbuffers.h"
|
||||
|
||||
namespace Evolution {
|
||||
namespace V1 {
|
||||
|
||||
struct TableA;
|
||||
|
||||
struct TableB;
|
||||
|
||||
struct Struct;
|
||||
|
||||
struct Root;
|
||||
|
||||
enum class Enum : int8_t {
|
||||
King = 0,
|
||||
Queen = 1,
|
||||
MIN = King,
|
||||
MAX = Queen
|
||||
};
|
||||
|
||||
inline const Enum (&EnumValuesEnum())[2] {
|
||||
static const Enum values[] = {
|
||||
Enum::King,
|
||||
Enum::Queen
|
||||
};
|
||||
return values;
|
||||
}
|
||||
|
||||
inline const char * const *EnumNamesEnum() {
|
||||
static const char * const names[3] = {
|
||||
"King",
|
||||
"Queen",
|
||||
nullptr
|
||||
};
|
||||
return names;
|
||||
}
|
||||
|
||||
inline const char *EnumNameEnum(Enum e) {
|
||||
if (e < Enum::King || e > Enum::Queen) return "";
|
||||
const size_t index = static_cast<size_t>(e);
|
||||
return EnumNamesEnum()[index];
|
||||
}
|
||||
|
||||
enum class Union : uint8_t {
|
||||
NONE = 0,
|
||||
TableA = 1,
|
||||
TableB = 2,
|
||||
MIN = NONE,
|
||||
MAX = TableB
|
||||
};
|
||||
|
||||
inline const Union (&EnumValuesUnion())[3] {
|
||||
static const Union values[] = {
|
||||
Union::NONE,
|
||||
Union::TableA,
|
||||
Union::TableB
|
||||
};
|
||||
return values;
|
||||
}
|
||||
|
||||
inline const char * const *EnumNamesUnion() {
|
||||
static const char * const names[4] = {
|
||||
"NONE",
|
||||
"TableA",
|
||||
"TableB",
|
||||
nullptr
|
||||
};
|
||||
return names;
|
||||
}
|
||||
|
||||
inline const char *EnumNameUnion(Union e) {
|
||||
if (e < Union::NONE || e > Union::TableB) return "";
|
||||
const size_t index = static_cast<size_t>(e);
|
||||
return EnumNamesUnion()[index];
|
||||
}
|
||||
|
||||
template<typename T> struct UnionTraits {
|
||||
static const Union enum_value = Union::NONE;
|
||||
};
|
||||
|
||||
template<> struct UnionTraits<Evolution::V1::TableA> {
|
||||
static const Union enum_value = Union::TableA;
|
||||
};
|
||||
|
||||
template<> struct UnionTraits<Evolution::V1::TableB> {
|
||||
static const Union enum_value = Union::TableB;
|
||||
};
|
||||
|
||||
bool VerifyUnion(flatbuffers::Verifier &verifier, const void *obj, Union type);
|
||||
bool VerifyUnionVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
|
||||
|
||||
FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Struct FLATBUFFERS_FINAL_CLASS {
|
||||
private:
|
||||
int32_t a_;
|
||||
int32_t padding0__;
|
||||
double b_;
|
||||
|
||||
public:
|
||||
Struct() {
|
||||
memset(static_cast<void *>(this), 0, sizeof(Struct));
|
||||
}
|
||||
Struct(int32_t _a, double _b)
|
||||
: a_(flatbuffers::EndianScalar(_a)),
|
||||
padding0__(0),
|
||||
b_(flatbuffers::EndianScalar(_b)) {
|
||||
(void)padding0__;
|
||||
}
|
||||
int32_t a() const {
|
||||
return flatbuffers::EndianScalar(a_);
|
||||
}
|
||||
double b() const {
|
||||
return flatbuffers::EndianScalar(b_);
|
||||
}
|
||||
};
|
||||
FLATBUFFERS_STRUCT_END(Struct, 16);
|
||||
|
||||
struct TableA FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||
VT_A = 4,
|
||||
VT_B = 6
|
||||
};
|
||||
float a() const {
|
||||
return GetField<float>(VT_A, 0.0f);
|
||||
}
|
||||
int32_t b() const {
|
||||
return GetField<int32_t>(VT_B, 0);
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<float>(verifier, VT_A) &&
|
||||
VerifyField<int32_t>(verifier, VT_B) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
};
|
||||
|
||||
struct TableABuilder {
|
||||
flatbuffers::FlatBufferBuilder &fbb_;
|
||||
flatbuffers::uoffset_t start_;
|
||||
void add_a(float a) {
|
||||
fbb_.AddElement<float>(TableA::VT_A, a, 0.0f);
|
||||
}
|
||||
void add_b(int32_t b) {
|
||||
fbb_.AddElement<int32_t>(TableA::VT_B, b, 0);
|
||||
}
|
||||
explicit TableABuilder(flatbuffers::FlatBufferBuilder &_fbb)
|
||||
: fbb_(_fbb) {
|
||||
start_ = fbb_.StartTable();
|
||||
}
|
||||
TableABuilder &operator=(const TableABuilder &);
|
||||
flatbuffers::Offset<TableA> Finish() {
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TableA>(end);
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
inline flatbuffers::Offset<TableA> CreateTableA(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
float a = 0.0f,
|
||||
int32_t b = 0) {
|
||||
TableABuilder builder_(_fbb);
|
||||
builder_.add_b(b);
|
||||
builder_.add_a(a);
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
struct TableB FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||
VT_A = 4
|
||||
};
|
||||
int32_t a() const {
|
||||
return GetField<int32_t>(VT_A, 0);
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<int32_t>(verifier, VT_A) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
};
|
||||
|
||||
struct TableBBuilder {
|
||||
flatbuffers::FlatBufferBuilder &fbb_;
|
||||
flatbuffers::uoffset_t start_;
|
||||
void add_a(int32_t a) {
|
||||
fbb_.AddElement<int32_t>(TableB::VT_A, a, 0);
|
||||
}
|
||||
explicit TableBBuilder(flatbuffers::FlatBufferBuilder &_fbb)
|
||||
: fbb_(_fbb) {
|
||||
start_ = fbb_.StartTable();
|
||||
}
|
||||
TableBBuilder &operator=(const TableBBuilder &);
|
||||
flatbuffers::Offset<TableB> Finish() {
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TableB>(end);
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
inline flatbuffers::Offset<TableB> CreateTableB(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
int32_t a = 0) {
|
||||
TableBBuilder builder_(_fbb);
|
||||
builder_.add_a(a);
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
struct Root FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||
VT_A = 4,
|
||||
VT_B = 6,
|
||||
VT_C_TYPE = 8,
|
||||
VT_C = 10,
|
||||
VT_D = 12,
|
||||
VT_E = 14,
|
||||
VT_F = 16,
|
||||
VT_G = 18,
|
||||
VT_H = 20,
|
||||
VT_I = 22
|
||||
};
|
||||
int32_t a() const {
|
||||
return GetField<int32_t>(VT_A, 0);
|
||||
}
|
||||
bool b() const {
|
||||
return GetField<uint8_t>(VT_B, 0) != 0;
|
||||
}
|
||||
Evolution::V1::Union c_type() const {
|
||||
return static_cast<Evolution::V1::Union>(GetField<uint8_t>(VT_C_TYPE, 0));
|
||||
}
|
||||
const void *c() const {
|
||||
return GetPointer<const void *>(VT_C);
|
||||
}
|
||||
template<typename T> const T *c_as() const;
|
||||
const Evolution::V1::TableA *c_as_TableA() const {
|
||||
return c_type() == Evolution::V1::Union::TableA ? static_cast<const Evolution::V1::TableA *>(c()) : nullptr;
|
||||
}
|
||||
const Evolution::V1::TableB *c_as_TableB() const {
|
||||
return c_type() == Evolution::V1::Union::TableB ? static_cast<const Evolution::V1::TableB *>(c()) : nullptr;
|
||||
}
|
||||
Evolution::V1::Enum d() const {
|
||||
return static_cast<Evolution::V1::Enum>(GetField<int8_t>(VT_D, 0));
|
||||
}
|
||||
const Evolution::V1::TableA *e() const {
|
||||
return GetPointer<const Evolution::V1::TableA *>(VT_E);
|
||||
}
|
||||
const Evolution::V1::Struct *f() const {
|
||||
return GetStruct<const Evolution::V1::Struct *>(VT_F);
|
||||
}
|
||||
const flatbuffers::Vector<int32_t> *g() const {
|
||||
return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_G);
|
||||
}
|
||||
const flatbuffers::Vector<flatbuffers::Offset<Evolution::V1::TableB>> *h() const {
|
||||
return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Evolution::V1::TableB>> *>(VT_H);
|
||||
}
|
||||
int32_t i() const {
|
||||
return GetField<int32_t>(VT_I, 1234);
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<int32_t>(verifier, VT_A) &&
|
||||
VerifyField<uint8_t>(verifier, VT_B) &&
|
||||
VerifyField<uint8_t>(verifier, VT_C_TYPE) &&
|
||||
VerifyOffset(verifier, VT_C) &&
|
||||
VerifyUnion(verifier, c(), c_type()) &&
|
||||
VerifyField<int8_t>(verifier, VT_D) &&
|
||||
VerifyOffset(verifier, VT_E) &&
|
||||
verifier.VerifyTable(e()) &&
|
||||
VerifyField<Evolution::V1::Struct>(verifier, VT_F) &&
|
||||
VerifyOffset(verifier, VT_G) &&
|
||||
verifier.VerifyVector(g()) &&
|
||||
VerifyOffset(verifier, VT_H) &&
|
||||
verifier.VerifyVector(h()) &&
|
||||
verifier.VerifyVectorOfTables(h()) &&
|
||||
VerifyField<int32_t>(verifier, VT_I) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
};
|
||||
|
||||
template<> inline const Evolution::V1::TableA *Root::c_as<Evolution::V1::TableA>() const {
|
||||
return c_as_TableA();
|
||||
}
|
||||
|
||||
template<> inline const Evolution::V1::TableB *Root::c_as<Evolution::V1::TableB>() const {
|
||||
return c_as_TableB();
|
||||
}
|
||||
|
||||
struct RootBuilder {
|
||||
flatbuffers::FlatBufferBuilder &fbb_;
|
||||
flatbuffers::uoffset_t start_;
|
||||
void add_a(int32_t a) {
|
||||
fbb_.AddElement<int32_t>(Root::VT_A, a, 0);
|
||||
}
|
||||
void add_b(bool b) {
|
||||
fbb_.AddElement<uint8_t>(Root::VT_B, static_cast<uint8_t>(b), 0);
|
||||
}
|
||||
void add_c_type(Evolution::V1::Union c_type) {
|
||||
fbb_.AddElement<uint8_t>(Root::VT_C_TYPE, static_cast<uint8_t>(c_type), 0);
|
||||
}
|
||||
void add_c(flatbuffers::Offset<void> c) {
|
||||
fbb_.AddOffset(Root::VT_C, c);
|
||||
}
|
||||
void add_d(Evolution::V1::Enum d) {
|
||||
fbb_.AddElement<int8_t>(Root::VT_D, static_cast<int8_t>(d), 0);
|
||||
}
|
||||
void add_e(flatbuffers::Offset<Evolution::V1::TableA> e) {
|
||||
fbb_.AddOffset(Root::VT_E, e);
|
||||
}
|
||||
void add_f(const Evolution::V1::Struct *f) {
|
||||
fbb_.AddStruct(Root::VT_F, f);
|
||||
}
|
||||
void add_g(flatbuffers::Offset<flatbuffers::Vector<int32_t>> g) {
|
||||
fbb_.AddOffset(Root::VT_G, g);
|
||||
}
|
||||
void add_h(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Evolution::V1::TableB>>> h) {
|
||||
fbb_.AddOffset(Root::VT_H, h);
|
||||
}
|
||||
void add_i(int32_t i) {
|
||||
fbb_.AddElement<int32_t>(Root::VT_I, i, 1234);
|
||||
}
|
||||
explicit RootBuilder(flatbuffers::FlatBufferBuilder &_fbb)
|
||||
: fbb_(_fbb) {
|
||||
start_ = fbb_.StartTable();
|
||||
}
|
||||
RootBuilder &operator=(const RootBuilder &);
|
||||
flatbuffers::Offset<Root> Finish() {
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<Root>(end);
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
inline flatbuffers::Offset<Root> CreateRoot(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
int32_t a = 0,
|
||||
bool b = false,
|
||||
Evolution::V1::Union c_type = Evolution::V1::Union::NONE,
|
||||
flatbuffers::Offset<void> c = 0,
|
||||
Evolution::V1::Enum d = Evolution::V1::Enum::King,
|
||||
flatbuffers::Offset<Evolution::V1::TableA> e = 0,
|
||||
const Evolution::V1::Struct *f = 0,
|
||||
flatbuffers::Offset<flatbuffers::Vector<int32_t>> g = 0,
|
||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Evolution::V1::TableB>>> h = 0,
|
||||
int32_t i = 1234) {
|
||||
RootBuilder builder_(_fbb);
|
||||
builder_.add_i(i);
|
||||
builder_.add_h(h);
|
||||
builder_.add_g(g);
|
||||
builder_.add_f(f);
|
||||
builder_.add_e(e);
|
||||
builder_.add_c(c);
|
||||
builder_.add_a(a);
|
||||
builder_.add_d(d);
|
||||
builder_.add_c_type(c_type);
|
||||
builder_.add_b(b);
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
inline flatbuffers::Offset<Root> CreateRootDirect(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
int32_t a = 0,
|
||||
bool b = false,
|
||||
Evolution::V1::Union c_type = Evolution::V1::Union::NONE,
|
||||
flatbuffers::Offset<void> c = 0,
|
||||
Evolution::V1::Enum d = Evolution::V1::Enum::King,
|
||||
flatbuffers::Offset<Evolution::V1::TableA> e = 0,
|
||||
const Evolution::V1::Struct *f = 0,
|
||||
const std::vector<int32_t> *g = nullptr,
|
||||
const std::vector<flatbuffers::Offset<Evolution::V1::TableB>> *h = nullptr,
|
||||
int32_t i = 1234) {
|
||||
auto g__ = g ? _fbb.CreateVector<int32_t>(*g) : 0;
|
||||
auto h__ = h ? _fbb.CreateVector<flatbuffers::Offset<Evolution::V1::TableB>>(*h) : 0;
|
||||
return Evolution::V1::CreateRoot(
|
||||
_fbb,
|
||||
a,
|
||||
b,
|
||||
c_type,
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f,
|
||||
g__,
|
||||
h__,
|
||||
i);
|
||||
}
|
||||
|
||||
inline bool VerifyUnion(flatbuffers::Verifier &verifier, const void *obj, Union type) {
|
||||
switch (type) {
|
||||
case Union::NONE: {
|
||||
return true;
|
||||
}
|
||||
case Union::TableA: {
|
||||
auto ptr = reinterpret_cast<const Evolution::V1::TableA *>(obj);
|
||||
return verifier.VerifyTable(ptr);
|
||||
}
|
||||
case Union::TableB: {
|
||||
auto ptr = reinterpret_cast<const Evolution::V1::TableB *>(obj);
|
||||
return verifier.VerifyTable(ptr);
|
||||
}
|
||||
default: return true;
|
||||
}
|
||||
}
|
||||
|
||||
inline bool VerifyUnionVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
|
||||
if (!values || !types) return !values && !types;
|
||||
if (values->size() != types->size()) return false;
|
||||
for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
|
||||
if (!VerifyUnion(
|
||||
verifier, values->Get(i), types->GetEnum<Union>(i))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
inline const Evolution::V1::Root *GetRoot(const void *buf) {
|
||||
return flatbuffers::GetRoot<Evolution::V1::Root>(buf);
|
||||
}
|
||||
|
||||
inline const Evolution::V1::Root *GetSizePrefixedRoot(const void *buf) {
|
||||
return flatbuffers::GetSizePrefixedRoot<Evolution::V1::Root>(buf);
|
||||
}
|
||||
|
||||
inline bool VerifyRootBuffer(
|
||||
flatbuffers::Verifier &verifier) {
|
||||
return verifier.VerifyBuffer<Evolution::V1::Root>(nullptr);
|
||||
}
|
||||
|
||||
inline bool VerifySizePrefixedRootBuffer(
|
||||
flatbuffers::Verifier &verifier) {
|
||||
return verifier.VerifySizePrefixedBuffer<Evolution::V1::Root>(nullptr);
|
||||
}
|
||||
|
||||
inline void FinishRootBuffer(
|
||||
flatbuffers::FlatBufferBuilder &fbb,
|
||||
flatbuffers::Offset<Evolution::V1::Root> root) {
|
||||
fbb.Finish(root);
|
||||
}
|
||||
|
||||
inline void FinishSizePrefixedRootBuffer(
|
||||
flatbuffers::FlatBufferBuilder &fbb,
|
||||
flatbuffers::Offset<Evolution::V1::Root> root) {
|
||||
fbb.FinishSizePrefixed(root);
|
||||
}
|
||||
|
||||
} // namespace V1
|
||||
} // namespace Evolution
|
||||
|
||||
#endif // FLATBUFFERS_GENERATED_EVOLUTIONV1_EVOLUTION_V1_H_
|
||||
Reference in New Issue
Block a user