Home | History | Annotate | Download | only in samples
      1 // automatically generated by the FlatBuffers compiler, do not modify
      2 
      3 
      4 #ifndef FLATBUFFERS_GENERATED_MONSTER_MYGAME_SAMPLE_H_
      5 #define FLATBUFFERS_GENERATED_MONSTER_MYGAME_SAMPLE_H_
      6 
      7 #include "flatbuffers/flatbuffers.h"
      8 
      9 namespace MyGame {
     10 namespace Sample {
     11 
     12 struct Vec3;
     13 
     14 struct Monster;
     15 struct MonsterT;
     16 
     17 struct Weapon;
     18 struct WeaponT;
     19 
     20 enum Color {
     21   Color_Red = 0,
     22   Color_Green = 1,
     23   Color_Blue = 2,
     24   Color_MIN = Color_Red,
     25   Color_MAX = Color_Blue
     26 };
     27 
     28 inline Color (&EnumValuesColor())[3] {
     29   static Color values[] = {
     30     Color_Red,
     31     Color_Green,
     32     Color_Blue
     33   };
     34   return values;
     35 }
     36 
     37 inline const char **EnumNamesColor() {
     38   static const char *names[] = {
     39     "Red",
     40     "Green",
     41     "Blue",
     42     nullptr
     43   };
     44   return names;
     45 }
     46 
     47 inline const char *EnumNameColor(Color e) {
     48   const size_t index = static_cast<int>(e);
     49   return EnumNamesColor()[index];
     50 }
     51 
     52 enum Equipment {
     53   Equipment_NONE = 0,
     54   Equipment_Weapon = 1,
     55   Equipment_MIN = Equipment_NONE,
     56   Equipment_MAX = Equipment_Weapon
     57 };
     58 
     59 inline Equipment (&EnumValuesEquipment())[2] {
     60   static Equipment values[] = {
     61     Equipment_NONE,
     62     Equipment_Weapon
     63   };
     64   return values;
     65 }
     66 
     67 inline const char **EnumNamesEquipment() {
     68   static const char *names[] = {
     69     "NONE",
     70     "Weapon",
     71     nullptr
     72   };
     73   return names;
     74 }
     75 
     76 inline const char *EnumNameEquipment(Equipment e) {
     77   const size_t index = static_cast<int>(e);
     78   return EnumNamesEquipment()[index];
     79 }
     80 
     81 template<typename T> struct EquipmentTraits {
     82   static const Equipment enum_value = Equipment_NONE;
     83 };
     84 
     85 template<> struct EquipmentTraits<Weapon> {
     86   static const Equipment enum_value = Equipment_Weapon;
     87 };
     88 
     89 struct EquipmentUnion {
     90   Equipment type;
     91   void *value;
     92 
     93   EquipmentUnion() : type(Equipment_NONE), value(nullptr) {}
     94   EquipmentUnion(EquipmentUnion&& u) FLATBUFFERS_NOEXCEPT :
     95     type(Equipment_NONE), value(nullptr)
     96     { std::swap(type, u.type); std::swap(value, u.value); }
     97   EquipmentUnion(const EquipmentUnion &) FLATBUFFERS_NOEXCEPT;
     98   EquipmentUnion &operator=(const EquipmentUnion &u) FLATBUFFERS_NOEXCEPT
     99     { EquipmentUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
    100   EquipmentUnion &operator=(EquipmentUnion &&u) FLATBUFFERS_NOEXCEPT
    101     { std::swap(type, u.type); std::swap(value, u.value); return *this; }
    102   ~EquipmentUnion() { Reset(); }
    103 
    104   void Reset();
    105 
    106 #ifndef FLATBUFFERS_CPP98_STL
    107   template <typename T>
    108   void Set(T&& val) {
    109     Reset();
    110     type = EquipmentTraits<typename T::TableType>::enum_value;
    111     if (type != Equipment_NONE) {
    112       value = new T(std::forward<T>(val));
    113     }
    114   }
    115 #endif  // FLATBUFFERS_CPP98_STL
    116 
    117   static void *UnPack(const void *obj, Equipment type, const flatbuffers::resolver_function_t *resolver);
    118   flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
    119 
    120   WeaponT *AsWeapon() {
    121     return type == Equipment_Weapon ?
    122       reinterpret_cast<WeaponT *>(value) : nullptr;
    123   }
    124   const WeaponT *AsWeapon() const {
    125     return type == Equipment_Weapon ?
    126       reinterpret_cast<const WeaponT *>(value) : nullptr;
    127   }
    128 };
    129 
    130 bool VerifyEquipment(flatbuffers::Verifier &verifier, const void *obj, Equipment type);
    131 bool VerifyEquipmentVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
    132 
    133 MANUALLY_ALIGNED_STRUCT(4) Vec3 FLATBUFFERS_FINAL_CLASS {
    134  private:
    135   float x_;
    136   float y_;
    137   float z_;
    138 
    139  public:
    140   Vec3() {
    141     memset(this, 0, sizeof(Vec3));
    142   }
    143   Vec3(float _x, float _y, float _z)
    144       : x_(flatbuffers::EndianScalar(_x)),
    145         y_(flatbuffers::EndianScalar(_y)),
    146         z_(flatbuffers::EndianScalar(_z)) {
    147   }
    148   float x() const {
    149     return flatbuffers::EndianScalar(x_);
    150   }
    151   void mutate_x(float _x) {
    152     flatbuffers::WriteScalar(&x_, _x);
    153   }
    154   float y() const {
    155     return flatbuffers::EndianScalar(y_);
    156   }
    157   void mutate_y(float _y) {
    158     flatbuffers::WriteScalar(&y_, _y);
    159   }
    160   float z() const {
    161     return flatbuffers::EndianScalar(z_);
    162   }
    163   void mutate_z(float _z) {
    164     flatbuffers::WriteScalar(&z_, _z);
    165   }
    166 };
    167 STRUCT_END(Vec3, 12);
    168 
    169 struct MonsterT : public flatbuffers::NativeTable {
    170   typedef Monster TableType;
    171   flatbuffers::unique_ptr<Vec3> pos;
    172   int16_t mana;
    173   int16_t hp;
    174   std::string name;
    175   std::vector<uint8_t> inventory;
    176   Color color;
    177   std::vector<flatbuffers::unique_ptr<WeaponT>> weapons;
    178   EquipmentUnion equipped;
    179   MonsterT()
    180       : mana(150),
    181         hp(100),
    182         color(Color_Blue) {
    183   }
    184 };
    185 
    186 struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    187   typedef MonsterT NativeTableType;
    188   enum {
    189     VT_POS = 4,
    190     VT_MANA = 6,
    191     VT_HP = 8,
    192     VT_NAME = 10,
    193     VT_INVENTORY = 14,
    194     VT_COLOR = 16,
    195     VT_WEAPONS = 18,
    196     VT_EQUIPPED_TYPE = 20,
    197     VT_EQUIPPED = 22
    198   };
    199   const Vec3 *pos() const {
    200     return GetStruct<const Vec3 *>(VT_POS);
    201   }
    202   Vec3 *mutable_pos() {
    203     return GetStruct<Vec3 *>(VT_POS);
    204   }
    205   int16_t mana() const {
    206     return GetField<int16_t>(VT_MANA, 150);
    207   }
    208   bool mutate_mana(int16_t _mana) {
    209     return SetField<int16_t>(VT_MANA, _mana, 150);
    210   }
    211   int16_t hp() const {
    212     return GetField<int16_t>(VT_HP, 100);
    213   }
    214   bool mutate_hp(int16_t _hp) {
    215     return SetField<int16_t>(VT_HP, _hp, 100);
    216   }
    217   const flatbuffers::String *name() const {
    218     return GetPointer<const flatbuffers::String *>(VT_NAME);
    219   }
    220   flatbuffers::String *mutable_name() {
    221     return GetPointer<flatbuffers::String *>(VT_NAME);
    222   }
    223   const flatbuffers::Vector<uint8_t> *inventory() const {
    224     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_INVENTORY);
    225   }
    226   flatbuffers::Vector<uint8_t> *mutable_inventory() {
    227     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_INVENTORY);
    228   }
    229   Color color() const {
    230     return static_cast<Color>(GetField<int8_t>(VT_COLOR, 2));
    231   }
    232   bool mutate_color(Color _color) {
    233     return SetField<int8_t>(VT_COLOR, static_cast<int8_t>(_color), 2);
    234   }
    235   const flatbuffers::Vector<flatbuffers::Offset<Weapon>> *weapons() const {
    236     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Weapon>> *>(VT_WEAPONS);
    237   }
    238   flatbuffers::Vector<flatbuffers::Offset<Weapon>> *mutable_weapons() {
    239     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<Weapon>> *>(VT_WEAPONS);
    240   }
    241   Equipment equipped_type() const {
    242     return static_cast<Equipment>(GetField<uint8_t>(VT_EQUIPPED_TYPE, 0));
    243   }
    244   bool mutate_equipped_type(Equipment _equipped_type) {
    245     return SetField<uint8_t>(VT_EQUIPPED_TYPE, static_cast<uint8_t>(_equipped_type), 0);
    246   }
    247   const void *equipped() const {
    248     return GetPointer<const void *>(VT_EQUIPPED);
    249   }
    250   template<typename T> const T *equipped_as() const;
    251   const Weapon *equipped_as_Weapon() const {
    252     return equipped_type() == Equipment_Weapon ? static_cast<const Weapon *>(equipped()) : nullptr;
    253   }
    254   void *mutable_equipped() {
    255     return GetPointer<void *>(VT_EQUIPPED);
    256   }
    257   bool Verify(flatbuffers::Verifier &verifier) const {
    258     return VerifyTableStart(verifier) &&
    259            VerifyField<Vec3>(verifier, VT_POS) &&
    260            VerifyField<int16_t>(verifier, VT_MANA) &&
    261            VerifyField<int16_t>(verifier, VT_HP) &&
    262            VerifyOffset(verifier, VT_NAME) &&
    263            verifier.Verify(name()) &&
    264            VerifyOffset(verifier, VT_INVENTORY) &&
    265            verifier.Verify(inventory()) &&
    266            VerifyField<int8_t>(verifier, VT_COLOR) &&
    267            VerifyOffset(verifier, VT_WEAPONS) &&
    268            verifier.Verify(weapons()) &&
    269            verifier.VerifyVectorOfTables(weapons()) &&
    270            VerifyField<uint8_t>(verifier, VT_EQUIPPED_TYPE) &&
    271            VerifyOffset(verifier, VT_EQUIPPED) &&
    272            VerifyEquipment(verifier, equipped(), equipped_type()) &&
    273            verifier.EndTable();
    274   }
    275   MonsterT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    276   void UnPackTo(MonsterT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    277   static flatbuffers::Offset<Monster> Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    278 };
    279 
    280 template<> inline const Weapon *Monster::equipped_as<Weapon>() const {
    281   return equipped_as_Weapon();
    282 }
    283 
    284 struct MonsterBuilder {
    285   flatbuffers::FlatBufferBuilder &fbb_;
    286   flatbuffers::uoffset_t start_;
    287   void add_pos(const Vec3 *pos) {
    288     fbb_.AddStruct(Monster::VT_POS, pos);
    289   }
    290   void add_mana(int16_t mana) {
    291     fbb_.AddElement<int16_t>(Monster::VT_MANA, mana, 150);
    292   }
    293   void add_hp(int16_t hp) {
    294     fbb_.AddElement<int16_t>(Monster::VT_HP, hp, 100);
    295   }
    296   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
    297     fbb_.AddOffset(Monster::VT_NAME, name);
    298   }
    299   void add_inventory(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory) {
    300     fbb_.AddOffset(Monster::VT_INVENTORY, inventory);
    301   }
    302   void add_color(Color color) {
    303     fbb_.AddElement<int8_t>(Monster::VT_COLOR, static_cast<int8_t>(color), 2);
    304   }
    305   void add_weapons(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Weapon>>> weapons) {
    306     fbb_.AddOffset(Monster::VT_WEAPONS, weapons);
    307   }
    308   void add_equipped_type(Equipment equipped_type) {
    309     fbb_.AddElement<uint8_t>(Monster::VT_EQUIPPED_TYPE, static_cast<uint8_t>(equipped_type), 0);
    310   }
    311   void add_equipped(flatbuffers::Offset<void> equipped) {
    312     fbb_.AddOffset(Monster::VT_EQUIPPED, equipped);
    313   }
    314   explicit MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    315         : fbb_(_fbb) {
    316     start_ = fbb_.StartTable();
    317   }
    318   MonsterBuilder &operator=(const MonsterBuilder &);
    319   flatbuffers::Offset<Monster> Finish() {
    320     const auto end = fbb_.EndTable(start_);
    321     auto o = flatbuffers::Offset<Monster>(end);
    322     return o;
    323   }
    324 };
    325 
    326 inline flatbuffers::Offset<Monster> CreateMonster(
    327     flatbuffers::FlatBufferBuilder &_fbb,
    328     const Vec3 *pos = 0,
    329     int16_t mana = 150,
    330     int16_t hp = 100,
    331     flatbuffers::Offset<flatbuffers::String> name = 0,
    332     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory = 0,
    333     Color color = Color_Blue,
    334     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Weapon>>> weapons = 0,
    335     Equipment equipped_type = Equipment_NONE,
    336     flatbuffers::Offset<void> equipped = 0) {
    337   MonsterBuilder builder_(_fbb);
    338   builder_.add_equipped(equipped);
    339   builder_.add_weapons(weapons);
    340   builder_.add_inventory(inventory);
    341   builder_.add_name(name);
    342   builder_.add_pos(pos);
    343   builder_.add_hp(hp);
    344   builder_.add_mana(mana);
    345   builder_.add_equipped_type(equipped_type);
    346   builder_.add_color(color);
    347   return builder_.Finish();
    348 }
    349 
    350 inline flatbuffers::Offset<Monster> CreateMonsterDirect(
    351     flatbuffers::FlatBufferBuilder &_fbb,
    352     const Vec3 *pos = 0,
    353     int16_t mana = 150,
    354     int16_t hp = 100,
    355     const char *name = nullptr,
    356     const std::vector<uint8_t> *inventory = nullptr,
    357     Color color = Color_Blue,
    358     const std::vector<flatbuffers::Offset<Weapon>> *weapons = nullptr,
    359     Equipment equipped_type = Equipment_NONE,
    360     flatbuffers::Offset<void> equipped = 0) {
    361   return MyGame::Sample::CreateMonster(
    362       _fbb,
    363       pos,
    364       mana,
    365       hp,
    366       name ? _fbb.CreateString(name) : 0,
    367       inventory ? _fbb.CreateVector<uint8_t>(*inventory) : 0,
    368       color,
    369       weapons ? _fbb.CreateVector<flatbuffers::Offset<Weapon>>(*weapons) : 0,
    370       equipped_type,
    371       equipped);
    372 }
    373 
    374 flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    375 
    376 struct WeaponT : public flatbuffers::NativeTable {
    377   typedef Weapon TableType;
    378   std::string name;
    379   int16_t damage;
    380   WeaponT()
    381       : damage(0) {
    382   }
    383 };
    384 
    385 struct Weapon FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    386   typedef WeaponT NativeTableType;
    387   enum {
    388     VT_NAME = 4,
    389     VT_DAMAGE = 6
    390   };
    391   const flatbuffers::String *name() const {
    392     return GetPointer<const flatbuffers::String *>(VT_NAME);
    393   }
    394   flatbuffers::String *mutable_name() {
    395     return GetPointer<flatbuffers::String *>(VT_NAME);
    396   }
    397   int16_t damage() const {
    398     return GetField<int16_t>(VT_DAMAGE, 0);
    399   }
    400   bool mutate_damage(int16_t _damage) {
    401     return SetField<int16_t>(VT_DAMAGE, _damage, 0);
    402   }
    403   bool Verify(flatbuffers::Verifier &verifier) const {
    404     return VerifyTableStart(verifier) &&
    405            VerifyOffset(verifier, VT_NAME) &&
    406            verifier.Verify(name()) &&
    407            VerifyField<int16_t>(verifier, VT_DAMAGE) &&
    408            verifier.EndTable();
    409   }
    410   WeaponT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    411   void UnPackTo(WeaponT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
    412   static flatbuffers::Offset<Weapon> Pack(flatbuffers::FlatBufferBuilder &_fbb, const WeaponT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    413 };
    414 
    415 struct WeaponBuilder {
    416   flatbuffers::FlatBufferBuilder &fbb_;
    417   flatbuffers::uoffset_t start_;
    418   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
    419     fbb_.AddOffset(Weapon::VT_NAME, name);
    420   }
    421   void add_damage(int16_t damage) {
    422     fbb_.AddElement<int16_t>(Weapon::VT_DAMAGE, damage, 0);
    423   }
    424   explicit WeaponBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    425         : fbb_(_fbb) {
    426     start_ = fbb_.StartTable();
    427   }
    428   WeaponBuilder &operator=(const WeaponBuilder &);
    429   flatbuffers::Offset<Weapon> Finish() {
    430     const auto end = fbb_.EndTable(start_);
    431     auto o = flatbuffers::Offset<Weapon>(end);
    432     return o;
    433   }
    434 };
    435 
    436 inline flatbuffers::Offset<Weapon> CreateWeapon(
    437     flatbuffers::FlatBufferBuilder &_fbb,
    438     flatbuffers::Offset<flatbuffers::String> name = 0,
    439     int16_t damage = 0) {
    440   WeaponBuilder builder_(_fbb);
    441   builder_.add_name(name);
    442   builder_.add_damage(damage);
    443   return builder_.Finish();
    444 }
    445 
    446 inline flatbuffers::Offset<Weapon> CreateWeaponDirect(
    447     flatbuffers::FlatBufferBuilder &_fbb,
    448     const char *name = nullptr,
    449     int16_t damage = 0) {
    450   return MyGame::Sample::CreateWeapon(
    451       _fbb,
    452       name ? _fbb.CreateString(name) : 0,
    453       damage);
    454 }
    455 
    456 flatbuffers::Offset<Weapon> CreateWeapon(flatbuffers::FlatBufferBuilder &_fbb, const WeaponT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
    457 
    458 inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
    459   auto _o = new MonsterT();
    460   UnPackTo(_o, _resolver);
    461   return _o;
    462 }
    463 
    464 inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function_t *_resolver) const {
    465   (void)_o;
    466   (void)_resolver;
    467   { auto _e = pos(); if (_e) _o->pos = flatbuffers::unique_ptr<Vec3>(new Vec3(*_e)); };
    468   { auto _e = mana(); _o->mana = _e; };
    469   { auto _e = hp(); _o->hp = _e; };
    470   { auto _e = name(); if (_e) _o->name = _e->str(); };
    471   { auto _e = inventory(); if (_e) { _o->inventory.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->inventory[_i] = _e->Get(_i); } } };
    472   { auto _e = color(); _o->color = _e; };
    473   { auto _e = weapons(); if (_e) { _o->weapons.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->weapons[_i] = flatbuffers::unique_ptr<WeaponT>(_e->Get(_i)->UnPack(_resolver)); } } };
    474   { auto _e = equipped_type(); _o->equipped.type = _e; };
    475   { auto _e = equipped(); if (_e) _o->equipped.value = EquipmentUnion::UnPack(_e, equipped_type(), _resolver); };
    476 }
    477 
    478 inline flatbuffers::Offset<Monster> Monster::Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
    479   return CreateMonster(_fbb, _o, _rehasher);
    480 }
    481 
    482 inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
    483   (void)_rehasher;
    484   (void)_o;
    485   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const MonsterT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
    486   auto _pos = _o->pos ? _o->pos.get() : 0;
    487   auto _mana = _o->mana;
    488   auto _hp = _o->hp;
    489   auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name);
    490   auto _inventory = _o->inventory.size() ? _fbb.CreateVector(_o->inventory) : 0;
    491   auto _color = _o->color;
    492   auto _weapons = _o->weapons.size() ? _fbb.CreateVector<flatbuffers::Offset<Weapon>> (_o->weapons.size(), [](size_t i, _VectorArgs *__va) { return CreateWeapon(*__va->__fbb, __va->__o->weapons[i].get(), __va->__rehasher); }, &_va ) : 0;
    493   auto _equipped_type = _o->equipped.type;
    494   auto _equipped = _o->equipped.Pack(_fbb);
    495   return MyGame::Sample::CreateMonster(
    496       _fbb,
    497       _pos,
    498       _mana,
    499       _hp,
    500       _name,
    501       _inventory,
    502       _color,
    503       _weapons,
    504       _equipped_type,
    505       _equipped);
    506 }
    507 
    508 inline WeaponT *Weapon::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
    509   auto _o = new WeaponT();
    510   UnPackTo(_o, _resolver);
    511   return _o;
    512 }
    513 
    514 inline void Weapon::UnPackTo(WeaponT *_o, const flatbuffers::resolver_function_t *_resolver) const {
    515   (void)_o;
    516   (void)_resolver;
    517   { auto _e = name(); if (_e) _o->name = _e->str(); };
    518   { auto _e = damage(); _o->damage = _e; };
    519 }
    520 
    521 inline flatbuffers::Offset<Weapon> Weapon::Pack(flatbuffers::FlatBufferBuilder &_fbb, const WeaponT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
    522   return CreateWeapon(_fbb, _o, _rehasher);
    523 }
    524 
    525 inline flatbuffers::Offset<Weapon> CreateWeapon(flatbuffers::FlatBufferBuilder &_fbb, const WeaponT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
    526   (void)_rehasher;
    527   (void)_o;
    528   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const WeaponT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
    529   auto _name = _o->name.empty() ? 0 : _fbb.CreateString(_o->name);
    530   auto _damage = _o->damage;
    531   return MyGame::Sample::CreateWeapon(
    532       _fbb,
    533       _name,
    534       _damage);
    535 }
    536 
    537 inline bool VerifyEquipment(flatbuffers::Verifier &verifier, const void *obj, Equipment type) {
    538   switch (type) {
    539     case Equipment_NONE: {
    540       return true;
    541     }
    542     case Equipment_Weapon: {
    543       auto ptr = reinterpret_cast<const Weapon *>(obj);
    544       return verifier.VerifyTable(ptr);
    545     }
    546     default: return false;
    547   }
    548 }
    549 
    550 inline bool VerifyEquipmentVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
    551   if (values->size() != types->size()) return false;
    552   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
    553     if (!VerifyEquipment(
    554         verifier,  values->Get(i), types->GetEnum<Equipment>(i))) {
    555       return false;
    556     }
    557   }
    558   return true;
    559 }
    560 
    561 inline void *EquipmentUnion::UnPack(const void *obj, Equipment type, const flatbuffers::resolver_function_t *resolver) {
    562   switch (type) {
    563     case Equipment_Weapon: {
    564       auto ptr = reinterpret_cast<const Weapon *>(obj);
    565       return ptr->UnPack(resolver);
    566     }
    567     default: return nullptr;
    568   }
    569 }
    570 
    571 inline flatbuffers::Offset<void> EquipmentUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
    572   switch (type) {
    573     case Equipment_Weapon: {
    574       auto ptr = reinterpret_cast<const WeaponT *>(value);
    575       return CreateWeapon(_fbb, ptr, _rehasher).Union();
    576     }
    577     default: return 0;
    578   }
    579 }
    580 
    581 inline EquipmentUnion::EquipmentUnion(const EquipmentUnion &u) FLATBUFFERS_NOEXCEPT : type(u.type), value(nullptr) {
    582   switch (type) {
    583     case Equipment_Weapon: {
    584       value = new WeaponT(*reinterpret_cast<WeaponT *>(u.value));
    585       break;
    586     }
    587     default:
    588       break;
    589   }
    590 }
    591 
    592 inline void EquipmentUnion::Reset() {
    593   switch (type) {
    594     case Equipment_Weapon: {
    595       auto ptr = reinterpret_cast<WeaponT *>(value);
    596       delete ptr;
    597       break;
    598     }
    599     default: break;
    600   }
    601   value = nullptr;
    602   type = Equipment_NONE;
    603 }
    604 
    605 inline flatbuffers::TypeTable *Vec3TypeTable();
    606 
    607 inline flatbuffers::TypeTable *MonsterTypeTable();
    608 
    609 inline flatbuffers::TypeTable *WeaponTypeTable();
    610 
    611 inline flatbuffers::TypeTable *ColorTypeTable() {
    612   static flatbuffers::TypeCode type_codes[] = {
    613     { flatbuffers::ET_CHAR, 0, 0 },
    614     { flatbuffers::ET_CHAR, 0, 0 },
    615     { flatbuffers::ET_CHAR, 0, 0 }
    616   };
    617   static flatbuffers::TypeFunction type_refs[] = {
    618     ColorTypeTable
    619   };
    620   static const char *names[] = {
    621     "Red",
    622     "Green",
    623     "Blue"
    624   };
    625   static flatbuffers::TypeTable tt = {
    626     flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, names
    627   };
    628   return &tt;
    629 }
    630 
    631 inline flatbuffers::TypeTable *EquipmentTypeTable() {
    632   static flatbuffers::TypeCode type_codes[] = {
    633     { flatbuffers::ET_SEQUENCE, 0, -1 },
    634     { flatbuffers::ET_SEQUENCE, 0, 0 }
    635   };
    636   static flatbuffers::TypeFunction type_refs[] = {
    637     WeaponTypeTable
    638   };
    639   static const char *names[] = {
    640     "NONE",
    641     "Weapon"
    642   };
    643   static flatbuffers::TypeTable tt = {
    644     flatbuffers::ST_UNION, 2, type_codes, type_refs, nullptr, names
    645   };
    646   return &tt;
    647 }
    648 
    649 inline flatbuffers::TypeTable *Vec3TypeTable() {
    650   static flatbuffers::TypeCode type_codes[] = {
    651     { flatbuffers::ET_FLOAT, 0, -1 },
    652     { flatbuffers::ET_FLOAT, 0, -1 },
    653     { flatbuffers::ET_FLOAT, 0, -1 }
    654   };
    655   static const int32_t values[] = { 0, 4, 8, 12 };
    656   static const char *names[] = {
    657     "x",
    658     "y",
    659     "z"
    660   };
    661   static flatbuffers::TypeTable tt = {
    662     flatbuffers::ST_STRUCT, 3, type_codes, nullptr, values, names
    663   };
    664   return &tt;
    665 }
    666 
    667 inline flatbuffers::TypeTable *MonsterTypeTable() {
    668   static flatbuffers::TypeCode type_codes[] = {
    669     { flatbuffers::ET_SEQUENCE, 0, 0 },
    670     { flatbuffers::ET_SHORT, 0, -1 },
    671     { flatbuffers::ET_SHORT, 0, -1 },
    672     { flatbuffers::ET_STRING, 0, -1 },
    673     { flatbuffers::ET_BOOL, 0, -1 },
    674     { flatbuffers::ET_UCHAR, 1, -1 },
    675     { flatbuffers::ET_CHAR, 0, 1 },
    676     { flatbuffers::ET_SEQUENCE, 1, 2 },
    677     { flatbuffers::ET_UTYPE, 0, 3 },
    678     { flatbuffers::ET_SEQUENCE, 0, 3 }
    679   };
    680   static flatbuffers::TypeFunction type_refs[] = {
    681     Vec3TypeTable,
    682     ColorTypeTable,
    683     WeaponTypeTable,
    684     EquipmentTypeTable
    685   };
    686   static const char *names[] = {
    687     "pos",
    688     "mana",
    689     "hp",
    690     "name",
    691     "friendly",
    692     "inventory",
    693     "color",
    694     "weapons",
    695     "equipped_type",
    696     "equipped"
    697   };
    698   static flatbuffers::TypeTable tt = {
    699     flatbuffers::ST_TABLE, 10, type_codes, type_refs, nullptr, names
    700   };
    701   return &tt;
    702 }
    703 
    704 inline flatbuffers::TypeTable *WeaponTypeTable() {
    705   static flatbuffers::TypeCode type_codes[] = {
    706     { flatbuffers::ET_STRING, 0, -1 },
    707     { flatbuffers::ET_SHORT, 0, -1 }
    708   };
    709   static const char *names[] = {
    710     "name",
    711     "damage"
    712   };
    713   static flatbuffers::TypeTable tt = {
    714     flatbuffers::ST_TABLE, 2, type_codes, nullptr, nullptr, names
    715   };
    716   return &tt;
    717 }
    718 
    719 inline const MyGame::Sample::Monster *GetMonster(const void *buf) {
    720   return flatbuffers::GetRoot<MyGame::Sample::Monster>(buf);
    721 }
    722 
    723 inline Monster *GetMutableMonster(void *buf) {
    724   return flatbuffers::GetMutableRoot<Monster>(buf);
    725 }
    726 
    727 inline bool VerifyMonsterBuffer(
    728     flatbuffers::Verifier &verifier) {
    729   return verifier.VerifyBuffer<MyGame::Sample::Monster>(nullptr);
    730 }
    731 
    732 inline void FinishMonsterBuffer(
    733     flatbuffers::FlatBufferBuilder &fbb,
    734     flatbuffers::Offset<MyGame::Sample::Monster> root) {
    735   fbb.Finish(root);
    736 }
    737 
    738 inline flatbuffers::unique_ptr<MonsterT> UnPackMonster(
    739     const void *buf,
    740     const flatbuffers::resolver_function_t *res = nullptr) {
    741   return flatbuffers::unique_ptr<MonsterT>(GetMonster(buf)->UnPack(res));
    742 }
    743 
    744 }  // namespace Sample
    745 }  // namespace MyGame
    746 
    747 #endif  // FLATBUFFERS_GENERATED_MONSTER_MYGAME_SAMPLE_H_
    748