Home | History | Annotate | Download | only in union_vector
      1 // automatically generated by the FlatBuffers compiler, do not modify
      2 
      3 
      4 #ifndef FLATBUFFERS_GENERATED_UNIONVECTOR_H_
      5 #define FLATBUFFERS_GENERATED_UNIONVECTOR_H_
      6 
      7 #include "flatbuffers/flatbuffers.h"
      8 
      9 struct Attacker;
     10 struct AttackerT;
     11 
     12 struct Rapunzel;
     13 
     14 struct BookReader;
     15 
     16 struct Movie;
     17 struct MovieT;
     18 
     19 enum Character {
     20   Character_NONE = 0,
     21   Character_MuLan = 1,
     22   Character_Rapunzel = 2,
     23   Character_Belle = 3,
     24   Character_BookFan = 4,
     25   Character_Other = 5,
     26   Character_Unused = 6,
     27   Character_MIN = Character_NONE,
     28   Character_MAX = Character_Unused
     29 };
     30 
     31 inline Character (&EnumValuesCharacter())[7] {
     32   static Character values[] = {
     33     Character_NONE,
     34     Character_MuLan,
     35     Character_Rapunzel,
     36     Character_Belle,
     37     Character_BookFan,
     38     Character_Other,
     39     Character_Unused
     40   };
     41   return values;
     42 }
     43 
     44 inline const char **EnumNamesCharacter() {
     45   static const char *names[] = {
     46     "NONE",
     47     "MuLan",
     48     "Rapunzel",
     49     "Belle",
     50     "BookFan",
     51     "Other",
     52     "Unused",
     53     nullptr
     54   };
     55   return names;
     56 }
     57 
     58 inline const char *EnumNameCharacter(Character e) {
     59   const size_t index = static_cast<int>(e);
     60   return EnumNamesCharacter()[index];
     61 }
     62 
     63 struct CharacterUnion {
     64   Character type;
     65   void *value;
     66 
     67   CharacterUnion() : type(Character_NONE), value(nullptr) {}
     68   CharacterUnion(CharacterUnion&& u) FLATBUFFERS_NOEXCEPT :
     69     type(Character_NONE), value(nullptr)
     70     { std::swap(type, u.type); std::swap(value, u.value); }
     71   CharacterUnion(const CharacterUnion &) FLATBUFFERS_NOEXCEPT;
     72   CharacterUnion &operator=(const CharacterUnion &u) FLATBUFFERS_NOEXCEPT
     73     { CharacterUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
     74   CharacterUnion &operator=(CharacterUnion &&u) FLATBUFFERS_NOEXCEPT
     75     { std::swap(type, u.type); std::swap(value, u.value); return *this; }
     76   ~CharacterUnion() { Reset(); }
     77 
     78   void Reset();
     79 
     80   static void *UnPack(const void *obj, Character type, const flatbuffers::resolver_function_t *resolver);
     81   flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
     82 
     83   AttackerT *AsMuLan() {
     84     return type == Character_MuLan ?
     85       reinterpret_cast<AttackerT *>(value) : nullptr;
     86   }
     87   const AttackerT *AsMuLan() const {
     88     return type == Character_MuLan ?
     89       reinterpret_cast<const AttackerT *>(value) : nullptr;
     90   }
     91   Rapunzel *AsRapunzel() {
     92     return type == Character_Rapunzel ?
     93       reinterpret_cast<Rapunzel *>(value) : nullptr;
     94   }
     95   const Rapunzel *AsRapunzel() const {
     96     return type == Character_Rapunzel ?
     97       reinterpret_cast<const Rapunzel *>(value) : nullptr;
     98   }
     99   BookReader *AsBelle() {
    100     return type == Character_Belle ?
    101       reinterpret_cast<BookReader *>(value) : nullptr;
    102   }
    103   const BookReader *AsBelle() const {
    104     return type == Character_Belle ?
    105       reinterpret_cast<const BookReader *>(value) : nullptr;
    106   }
    107   BookReader *AsBookFan() {
    108     return type == Character_BookFan ?
    109       reinterpret_cast<BookReader *>(value) : nullptr;
    110   }
    111   const BookReader *AsBookFan() const {
    112     return type == Character_BookFan ?
    113       reinterpret_cast<const BookReader *>(value) : nullptr;
    114   }
    115   std::string *AsOther() {
    116     return type == Character_Other ?
    117       reinterpret_cast<std::string *>(value) : nullptr;
    118   }
    119   const std::string *AsOther() const {
    120     return type == Character_Other ?
    121       reinterpret_cast<const std::string *>(value) : nullptr;
    122   }
    123   std::string *AsUnused() {
    124     return type == Character_Unused ?
    125       reinterpret_cast<std::string *>(value) : nullptr;
    126   }
    127   const std::string *AsUnused() const {
    128     return type == Character_Unused ?
    129       reinterpret_cast<const std::string *>(value) : nullptr;
    130   }
    131 };
    132 
    133 bool VerifyCharacter(flatbuffers::Verifier &verifier, const void *obj, Character type);
    134 bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
    135 
    136 MANUALLY_ALIGNED_STRUCT(4) Rapunzel FLATBUFFERS_FINAL_CLASS {
    137  private:
    138   int32_t hair_length_;
    139 
    140  public:
    141   Rapunzel() {
    142     memset(this, 0, sizeof(Rapunzel));
    143   }
    144   Rapunzel(int32_t _hair_length)
    145       : hair_length_(flatbuffers::EndianScalar(_hair_length)) {
    146   }
    147   int32_t hair_length() const {
    148     return flatbuffers::EndianScalar(hair_length_);
    149   }
    150   void mutate_hair_length(int32_t _hair_length) {
    151     flatbuffers::WriteScalar(&hair_length_, _hair_length);
    152   }
    153 };
    154 STRUCT_END(Rapunzel, 4);
    155 
    156 MANUALLY_ALIGNED_STRUCT(4) BookReader FLATBUFFERS_FINAL_CLASS {
    157  private:
    158   int32_t books_read_;
    159 
    160  public:
    161   BookReader() {
    162     memset(this, 0, sizeof(BookReader));
    163   }
    164   BookReader(int32_t _books_read)
    165       : books_read_(flatbuffers::EndianScalar(_books_read)) {
    166   }
    167   int32_t books_read() const {
    168     return flatbuffers::EndianScalar(books_read_);
    169   }
    170   void mutate_books_read(int32_t _books_read) {
    171     flatbuffers::WriteScalar(&books_read_, _books_read);
    172   }
    173 };
    174 STRUCT_END(BookReader, 4);
    175 
    176 struct AttackerT : public flatbuffers::NativeTable {
    177   typedef Attacker TableType;
    178   int32_t sword_attack_damage;
    179   AttackerT()
    180       : sword_attack_damage(0) {
    181   }
    182 };
    183 
    184 struct Attacker FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    185   typedef AttackerT NativeTableType;
    186   enum {
    187     VT_SWORD_ATTACK_DAMAGE = 4
    188   };
    189   int32_t sword_attack_damage() const {
    190     return GetField<int32_t>(VT_SWORD_ATTACK_DAMAGE, 0);
    191   }
    192   bool mutate_sword_attack_damage(int32_t _sword_attack_damage) {
    193     return SetField<int32_t>(VT_SWORD_ATTACK_DAMAGE, _sword_attack_damage, 0);
    194   }
    195   bool Verify(flatbuffers::Verifier &verifier) const {
    196     return VerifyTableStart(verifier) &&
    197            VerifyField<int32_t>(verifier, VT_SWORD_ATTACK_DAMAGE) &&
    198            verifier.EndTable();
    199   }
    200   AttackerT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    201   void UnPackTo(AttackerT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    202   static flatbuffers::Offset<Attacker> Pack(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    203 };
    204 
    205 struct AttackerBuilder {
    206   flatbuffers::FlatBufferBuilder &fbb_;
    207   flatbuffers::uoffset_t start_;
    208   void add_sword_attack_damage(int32_t sword_attack_damage) {
    209     fbb_.AddElement<int32_t>(Attacker::VT_SWORD_ATTACK_DAMAGE, sword_attack_damage, 0);
    210   }
    211   explicit AttackerBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    212         : fbb_(_fbb) {
    213     start_ = fbb_.StartTable();
    214   }
    215   AttackerBuilder &operator=(const AttackerBuilder &);
    216   flatbuffers::Offset<Attacker> Finish() {
    217     const auto end = fbb_.EndTable(start_);
    218     auto o = flatbuffers::Offset<Attacker>(end);
    219     return o;
    220   }
    221 };
    222 
    223 inline flatbuffers::Offset<Attacker> CreateAttacker(
    224     flatbuffers::FlatBufferBuilder &_fbb,
    225     int32_t sword_attack_damage = 0) {
    226   AttackerBuilder builder_(_fbb);
    227   builder_.add_sword_attack_damage(sword_attack_damage);
    228   return builder_.Finish();
    229 }
    230 
    231 flatbuffers::Offset<Attacker> CreateAttacker(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    232 
    233 struct MovieT : public flatbuffers::NativeTable {
    234   typedef Movie TableType;
    235   CharacterUnion main_character;
    236   std::vector<CharacterUnion> characters;
    237   MovieT() {
    238   }
    239 };
    240 
    241 struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    242   typedef MovieT NativeTableType;
    243   enum {
    244     VT_MAIN_CHARACTER_TYPE = 4,
    245     VT_MAIN_CHARACTER = 6,
    246     VT_CHARACTERS_TYPE = 8,
    247     VT_CHARACTERS = 10
    248   };
    249   Character main_character_type() const {
    250     return static_cast<Character>(GetField<uint8_t>(VT_MAIN_CHARACTER_TYPE, 0));
    251   }
    252   bool mutate_main_character_type(Character _main_character_type) {
    253     return SetField<uint8_t>(VT_MAIN_CHARACTER_TYPE, static_cast<uint8_t>(_main_character_type), 0);
    254   }
    255   const void *main_character() const {
    256     return GetPointer<const void *>(VT_MAIN_CHARACTER);
    257   }
    258   template<typename T> const T *main_character_as() const;
    259   const Attacker *main_character_as_MuLan() const {
    260     return main_character_type() == Character_MuLan ? static_cast<const Attacker *>(main_character()) : nullptr;
    261   }
    262   const Rapunzel *main_character_as_Rapunzel() const {
    263     return main_character_type() == Character_Rapunzel ? static_cast<const Rapunzel *>(main_character()) : nullptr;
    264   }
    265   const BookReader *main_character_as_Belle() const {
    266     return main_character_type() == Character_Belle ? static_cast<const BookReader *>(main_character()) : nullptr;
    267   }
    268   const BookReader *main_character_as_BookFan() const {
    269     return main_character_type() == Character_BookFan ? static_cast<const BookReader *>(main_character()) : nullptr;
    270   }
    271   const flatbuffers::String *main_character_as_Other() const {
    272     return main_character_type() == Character_Other ? static_cast<const flatbuffers::String *>(main_character()) : nullptr;
    273   }
    274   const flatbuffers::String *main_character_as_Unused() const {
    275     return main_character_type() == Character_Unused ? static_cast<const flatbuffers::String *>(main_character()) : nullptr;
    276   }
    277   void *mutable_main_character() {
    278     return GetPointer<void *>(VT_MAIN_CHARACTER);
    279   }
    280   const flatbuffers::Vector<uint8_t> *characters_type() const {
    281     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_CHARACTERS_TYPE);
    282   }
    283   flatbuffers::Vector<uint8_t> *mutable_characters_type() {
    284     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_CHARACTERS_TYPE);
    285   }
    286   const flatbuffers::Vector<flatbuffers::Offset<void>> *characters() const {
    287     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<void>> *>(VT_CHARACTERS);
    288   }
    289   flatbuffers::Vector<flatbuffers::Offset<void>> *mutable_characters() {
    290     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<void>> *>(VT_CHARACTERS);
    291   }
    292   bool Verify(flatbuffers::Verifier &verifier) const {
    293     return VerifyTableStart(verifier) &&
    294            VerifyField<uint8_t>(verifier, VT_MAIN_CHARACTER_TYPE) &&
    295            VerifyOffset(verifier, VT_MAIN_CHARACTER) &&
    296            VerifyCharacter(verifier, main_character(), main_character_type()) &&
    297            VerifyOffset(verifier, VT_CHARACTERS_TYPE) &&
    298            verifier.Verify(characters_type()) &&
    299            VerifyOffset(verifier, VT_CHARACTERS) &&
    300            verifier.Verify(characters()) &&
    301            VerifyCharacterVector(verifier, characters(), characters_type()) &&
    302            verifier.EndTable();
    303   }
    304   MovieT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    305   void UnPackTo(MovieT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    306   static flatbuffers::Offset<Movie> Pack(flatbuffers::FlatBufferBuilder &_fbb, const MovieT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    307 };
    308 
    309 struct MovieBuilder {
    310   flatbuffers::FlatBufferBuilder &fbb_;
    311   flatbuffers::uoffset_t start_;
    312   void add_main_character_type(Character main_character_type) {
    313     fbb_.AddElement<uint8_t>(Movie::VT_MAIN_CHARACTER_TYPE, static_cast<uint8_t>(main_character_type), 0);
    314   }
    315   void add_main_character(flatbuffers::Offset<void> main_character) {
    316     fbb_.AddOffset(Movie::VT_MAIN_CHARACTER, main_character);
    317   }
    318   void add_characters_type(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> characters_type) {
    319     fbb_.AddOffset(Movie::VT_CHARACTERS_TYPE, characters_type);
    320   }
    321   void add_characters(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<void>>> characters) {
    322     fbb_.AddOffset(Movie::VT_CHARACTERS, characters);
    323   }
    324   explicit MovieBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    325         : fbb_(_fbb) {
    326     start_ = fbb_.StartTable();
    327   }
    328   MovieBuilder &operator=(const MovieBuilder &);
    329   flatbuffers::Offset<Movie> Finish() {
    330     const auto end = fbb_.EndTable(start_);
    331     auto o = flatbuffers::Offset<Movie>(end);
    332     return o;
    333   }
    334 };
    335 
    336 inline flatbuffers::Offset<Movie> CreateMovie(
    337     flatbuffers::FlatBufferBuilder &_fbb,
    338     Character main_character_type = Character_NONE,
    339     flatbuffers::Offset<void> main_character = 0,
    340     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> characters_type = 0,
    341     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<void>>> characters = 0) {
    342   MovieBuilder builder_(_fbb);
    343   builder_.add_characters(characters);
    344   builder_.add_characters_type(characters_type);
    345   builder_.add_main_character(main_character);
    346   builder_.add_main_character_type(main_character_type);
    347   return builder_.Finish();
    348 }
    349 
    350 inline flatbuffers::Offset<Movie> CreateMovieDirect(
    351     flatbuffers::FlatBufferBuilder &_fbb,
    352     Character main_character_type = Character_NONE,
    353     flatbuffers::Offset<void> main_character = 0,
    354     const std::vector<uint8_t> *characters_type = nullptr,
    355     const std::vector<flatbuffers::Offset<void>> *characters = nullptr) {
    356   return CreateMovie(
    357       _fbb,
    358       main_character_type,
    359       main_character,
    360       characters_type ? _fbb.CreateVector<uint8_t>(*characters_type) : 0,
    361       characters ? _fbb.CreateVector<flatbuffers::Offset<void>>(*characters) : 0);
    362 }
    363 
    364 flatbuffers::Offset<Movie> CreateMovie(flatbuffers::FlatBufferBuilder &_fbb, const MovieT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    365 
    366 inline AttackerT *Attacker::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
    367   auto _o = new AttackerT();
    368   UnPackTo(_o, _resolver);
    369   return _o;
    370 }
    371 
    372 inline void Attacker::UnPackTo(AttackerT *_o, const flatbuffers::resolver_function_t *_resolver) const {
    373   (void)_o;
    374   (void)_resolver;
    375   { auto _e = sword_attack_damage(); _o->sword_attack_damage = _e; };
    376 }
    377 
    378 inline flatbuffers::Offset<Attacker> Attacker::Pack(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
    379   return CreateAttacker(_fbb, _o, _rehasher);
    380 }
    381 
    382 inline flatbuffers::Offset<Attacker> CreateAttacker(flatbuffers::FlatBufferBuilder &_fbb, const AttackerT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
    383   (void)_rehasher;
    384   (void)_o;
    385   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const AttackerT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
    386   auto _sword_attack_damage = _o->sword_attack_damage;
    387   return CreateAttacker(
    388       _fbb,
    389       _sword_attack_damage);
    390 }
    391 
    392 inline MovieT *Movie::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
    393   auto _o = new MovieT();
    394   UnPackTo(_o, _resolver);
    395   return _o;
    396 }
    397 
    398 inline void Movie::UnPackTo(MovieT *_o, const flatbuffers::resolver_function_t *_resolver) const {
    399   (void)_o;
    400   (void)_resolver;
    401   { auto _e = main_character_type(); _o->main_character.type = _e; };
    402   { auto _e = main_character(); if (_e) _o->main_character.value = CharacterUnion::UnPack(_e, main_character_type(), _resolver); };
    403   { auto _e = characters_type(); if (_e) { _o->characters.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->characters[_i].type = (Character)_e->Get(_i); } } };
    404   { auto _e = characters(); if (_e) { _o->characters.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->characters[_i].value = CharacterUnion::UnPack(_e->Get(_i), characters_type()->GetEnum<Character>(_i), _resolver); } } };
    405 }
    406 
    407 inline flatbuffers::Offset<Movie> Movie::Pack(flatbuffers::FlatBufferBuilder &_fbb, const MovieT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
    408   return CreateMovie(_fbb, _o, _rehasher);
    409 }
    410 
    411 inline flatbuffers::Offset<Movie> CreateMovie(flatbuffers::FlatBufferBuilder &_fbb, const MovieT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
    412   (void)_rehasher;
    413   (void)_o;
    414   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const MovieT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
    415   auto _main_character_type = _o->main_character.type;
    416   auto _main_character = _o->main_character.Pack(_fbb);
    417   auto _characters_type = _o->characters.size() ? _fbb.CreateVector<uint8_t>(_o->characters.size(), [](size_t i, _VectorArgs *__va) { return static_cast<uint8_t>(__va->__o->characters[i].type); }, &_va) : 0;
    418   auto _characters = _o->characters.size() ? _fbb.CreateVector<flatbuffers::Offset<void>>(_o->characters.size(), [](size_t i, _VectorArgs *__va) { return __va->__o->characters[i].Pack(*__va->__fbb, __va->__rehasher); }, &_va) : 0;
    419   return CreateMovie(
    420       _fbb,
    421       _main_character_type,
    422       _main_character,
    423       _characters_type,
    424       _characters);
    425 }
    426 
    427 inline bool VerifyCharacter(flatbuffers::Verifier &verifier, const void *obj, Character type) {
    428   switch (type) {
    429     case Character_NONE: {
    430       return true;
    431     }
    432     case Character_MuLan: {
    433       auto ptr = reinterpret_cast<const Attacker *>(obj);
    434       return verifier.VerifyTable(ptr);
    435     }
    436     case Character_Rapunzel: {
    437       return true;
    438     }
    439     case Character_Belle: {
    440       return true;
    441     }
    442     case Character_BookFan: {
    443       return true;
    444     }
    445     case Character_Other: {
    446       auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
    447       return verifier.Verify(ptr);
    448     }
    449     case Character_Unused: {
    450       auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
    451       return verifier.Verify(ptr);
    452     }
    453     default: return false;
    454   }
    455 }
    456 
    457 inline bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
    458   if (values->size() != types->size()) return false;
    459   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
    460     if (!VerifyCharacter(
    461         verifier,  values->Get(i), types->GetEnum<Character>(i))) {
    462       return false;
    463     }
    464   }
    465   return true;
    466 }
    467 
    468 inline void *CharacterUnion::UnPack(const void *obj, Character type, const flatbuffers::resolver_function_t *resolver) {
    469   switch (type) {
    470     case Character_MuLan: {
    471       auto ptr = reinterpret_cast<const Attacker *>(obj);
    472       return ptr->UnPack(resolver);
    473     }
    474     case Character_Rapunzel: {
    475       auto ptr = reinterpret_cast<const Rapunzel *>(obj);
    476       return new Rapunzel(*ptr);
    477     }
    478     case Character_Belle: {
    479       auto ptr = reinterpret_cast<const BookReader *>(obj);
    480       return new BookReader(*ptr);
    481     }
    482     case Character_BookFan: {
    483       auto ptr = reinterpret_cast<const BookReader *>(obj);
    484       return new BookReader(*ptr);
    485     }
    486     case Character_Other: {
    487       auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
    488       return new std::string(ptr->c_str(), ptr->size());
    489     }
    490     case Character_Unused: {
    491       auto ptr = reinterpret_cast<const flatbuffers::String *>(obj);
    492       return new std::string(ptr->c_str(), ptr->size());
    493     }
    494     default: return nullptr;
    495   }
    496 }
    497 
    498 inline flatbuffers::Offset<void> CharacterUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
    499   switch (type) {
    500     case Character_MuLan: {
    501       auto ptr = reinterpret_cast<const AttackerT *>(value);
    502       return CreateAttacker(_fbb, ptr, _rehasher).Union();
    503     }
    504     case Character_Rapunzel: {
    505       auto ptr = reinterpret_cast<const Rapunzel *>(value);
    506       return _fbb.CreateStruct(*ptr).Union();
    507     }
    508     case Character_Belle: {
    509       auto ptr = reinterpret_cast<const BookReader *>(value);
    510       return _fbb.CreateStruct(*ptr).Union();
    511     }
    512     case Character_BookFan: {
    513       auto ptr = reinterpret_cast<const BookReader *>(value);
    514       return _fbb.CreateStruct(*ptr).Union();
    515     }
    516     case Character_Other: {
    517       auto ptr = reinterpret_cast<const std::string *>(value);
    518       return _fbb.CreateString(*ptr).Union();
    519     }
    520     case Character_Unused: {
    521       auto ptr = reinterpret_cast<const std::string *>(value);
    522       return _fbb.CreateString(*ptr).Union();
    523     }
    524     default: return 0;
    525   }
    526 }
    527 
    528 inline CharacterUnion::CharacterUnion(const CharacterUnion &u) FLATBUFFERS_NOEXCEPT : type(u.type), value(nullptr) {
    529   switch (type) {
    530     case Character_MuLan: {
    531       value = new AttackerT(*reinterpret_cast<AttackerT *>(u.value));
    532       break;
    533     }
    534     case Character_Rapunzel: {
    535       value = new Rapunzel(*reinterpret_cast<Rapunzel *>(u.value));
    536       break;
    537     }
    538     case Character_Belle: {
    539       value = new BookReader(*reinterpret_cast<BookReader *>(u.value));
    540       break;
    541     }
    542     case Character_BookFan: {
    543       value = new BookReader(*reinterpret_cast<BookReader *>(u.value));
    544       break;
    545     }
    546     case Character_Other: {
    547       value = new std::string(*reinterpret_cast<std::string *>(u.value));
    548       break;
    549     }
    550     case Character_Unused: {
    551       value = new std::string(*reinterpret_cast<std::string *>(u.value));
    552       break;
    553     }
    554     default:
    555       break;
    556   }
    557 }
    558 
    559 inline void CharacterUnion::Reset() {
    560   switch (type) {
    561     case Character_MuLan: {
    562       auto ptr = reinterpret_cast<AttackerT *>(value);
    563       delete ptr;
    564       break;
    565     }
    566     case Character_Rapunzel: {
    567       auto ptr = reinterpret_cast<Rapunzel *>(value);
    568       delete ptr;
    569       break;
    570     }
    571     case Character_Belle: {
    572       auto ptr = reinterpret_cast<BookReader *>(value);
    573       delete ptr;
    574       break;
    575     }
    576     case Character_BookFan: {
    577       auto ptr = reinterpret_cast<BookReader *>(value);
    578       delete ptr;
    579       break;
    580     }
    581     case Character_Other: {
    582       auto ptr = reinterpret_cast<std::string *>(value);
    583       delete ptr;
    584       break;
    585     }
    586     case Character_Unused: {
    587       auto ptr = reinterpret_cast<std::string *>(value);
    588       delete ptr;
    589       break;
    590     }
    591     default: break;
    592   }
    593   value = nullptr;
    594   type = Character_NONE;
    595 }
    596 
    597 inline flatbuffers::TypeTable *AttackerTypeTable();
    598 
    599 inline flatbuffers::TypeTable *RapunzelTypeTable();
    600 
    601 inline flatbuffers::TypeTable *BookReaderTypeTable();
    602 
    603 inline flatbuffers::TypeTable *MovieTypeTable();
    604 
    605 inline flatbuffers::TypeTable *CharacterTypeTable() {
    606   static flatbuffers::TypeCode type_codes[] = {
    607     { flatbuffers::ET_SEQUENCE, 0, -1 },
    608     { flatbuffers::ET_SEQUENCE, 0, 0 },
    609     { flatbuffers::ET_SEQUENCE, 0, 1 },
    610     { flatbuffers::ET_SEQUENCE, 0, 2 },
    611     { flatbuffers::ET_SEQUENCE, 0, 2 },
    612     { flatbuffers::ET_STRING, 0, -1 },
    613     { flatbuffers::ET_STRING, 0, -1 }
    614   };
    615   static flatbuffers::TypeFunction type_refs[] = {
    616     AttackerTypeTable,
    617     RapunzelTypeTable,
    618     BookReaderTypeTable
    619   };
    620   static const char *names[] = {
    621     "NONE",
    622     "MuLan",
    623     "Rapunzel",
    624     "Belle",
    625     "BookFan",
    626     "Other",
    627     "Unused"
    628   };
    629   static flatbuffers::TypeTable tt = {
    630     flatbuffers::ST_UNION, 7, type_codes, type_refs, nullptr, names
    631   };
    632   return &tt;
    633 }
    634 
    635 inline flatbuffers::TypeTable *AttackerTypeTable() {
    636   static flatbuffers::TypeCode type_codes[] = {
    637     { flatbuffers::ET_INT, 0, -1 }
    638   };
    639   static const char *names[] = {
    640     "sword_attack_damage"
    641   };
    642   static flatbuffers::TypeTable tt = {
    643     flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, names
    644   };
    645   return &tt;
    646 }
    647 
    648 inline flatbuffers::TypeTable *RapunzelTypeTable() {
    649   static flatbuffers::TypeCode type_codes[] = {
    650     { flatbuffers::ET_INT, 0, -1 }
    651   };
    652   static const int32_t values[] = { 0, 4 };
    653   static const char *names[] = {
    654     "hair_length"
    655   };
    656   static flatbuffers::TypeTable tt = {
    657     flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names
    658   };
    659   return &tt;
    660 }
    661 
    662 inline flatbuffers::TypeTable *BookReaderTypeTable() {
    663   static flatbuffers::TypeCode type_codes[] = {
    664     { flatbuffers::ET_INT, 0, -1 }
    665   };
    666   static const int32_t values[] = { 0, 4 };
    667   static const char *names[] = {
    668     "books_read"
    669   };
    670   static flatbuffers::TypeTable tt = {
    671     flatbuffers::ST_STRUCT, 1, type_codes, nullptr, values, names
    672   };
    673   return &tt;
    674 }
    675 
    676 inline flatbuffers::TypeTable *MovieTypeTable() {
    677   static flatbuffers::TypeCode type_codes[] = {
    678     { flatbuffers::ET_UTYPE, 0, 0 },
    679     { flatbuffers::ET_SEQUENCE, 0, 0 },
    680     { flatbuffers::ET_UTYPE, 1, 0 },
    681     { flatbuffers::ET_SEQUENCE, 1, 0 }
    682   };
    683   static flatbuffers::TypeFunction type_refs[] = {
    684     CharacterTypeTable
    685   };
    686   static const char *names[] = {
    687     "main_character_type",
    688     "main_character",
    689     "characters_type",
    690     "characters"
    691   };
    692   static flatbuffers::TypeTable tt = {
    693     flatbuffers::ST_TABLE, 4, type_codes, type_refs, nullptr, names
    694   };
    695   return &tt;
    696 }
    697 
    698 inline const Movie *GetMovie(const void *buf) {
    699   return flatbuffers::GetRoot<Movie>(buf);
    700 }
    701 
    702 inline Movie *GetMutableMovie(void *buf) {
    703   return flatbuffers::GetMutableRoot<Movie>(buf);
    704 }
    705 
    706 inline const char *MovieIdentifier() {
    707   return "MOVI";
    708 }
    709 
    710 inline bool MovieBufferHasIdentifier(const void *buf) {
    711   return flatbuffers::BufferHasIdentifier(
    712       buf, MovieIdentifier());
    713 }
    714 
    715 inline bool VerifyMovieBuffer(
    716     flatbuffers::Verifier &verifier) {
    717   return verifier.VerifyBuffer<Movie>(MovieIdentifier());
    718 }
    719 
    720 inline void FinishMovieBuffer(
    721     flatbuffers::FlatBufferBuilder &fbb,
    722     flatbuffers::Offset<Movie> root) {
    723   fbb.Finish(root, MovieIdentifier());
    724 }
    725 
    726 inline flatbuffers::unique_ptr<MovieT> UnPackMovie(
    727     const void *buf,
    728     const flatbuffers::resolver_function_t *res = nullptr) {
    729   return flatbuffers::unique_ptr<MovieT>(GetMovie(buf)->UnPack(res));
    730 }
    731 
    732 #endif  // FLATBUFFERS_GENERATED_UNIONVECTOR_H_
    733