• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // automatically generated by the FlatBuffers compiler, do not modify
2 
3 
4 #ifndef FLATBUFFERS_GENERATED_MONSTERTEST_MYGAME_EXAMPLE_H_
5 #define FLATBUFFERS_GENERATED_MONSTERTEST_MYGAME_EXAMPLE_H_
6 
7 #include "flatbuffers/flatbuffers.h"
8 #include "flatbuffers/flexbuffers.h"
9 
10 namespace MyGame {
11 
12 struct InParentNamespace;
13 struct InParentNamespaceBuilder;
14 struct InParentNamespaceT;
15 
16 namespace Example2 {
17 
18 struct Monster;
19 struct MonsterBuilder;
20 struct MonsterT;
21 
22 }  // namespace Example2
23 
24 namespace Example {
25 
26 struct Test;
27 
28 struct TestSimpleTableWithEnum;
29 struct TestSimpleTableWithEnumBuilder;
30 struct TestSimpleTableWithEnumT;
31 
32 struct Vec3;
33 
34 struct Ability;
35 
36 struct StructOfStructs;
37 
38 struct Stat;
39 struct StatBuilder;
40 struct StatT;
41 
42 struct Referrable;
43 struct ReferrableBuilder;
44 struct ReferrableT;
45 
46 struct Monster;
47 struct MonsterBuilder;
48 struct MonsterT;
49 
50 struct TypeAliases;
51 struct TypeAliasesBuilder;
52 struct TypeAliasesT;
53 
54 }  // namespace Example
55 
56 inline const flatbuffers::TypeTable *InParentNamespaceTypeTable();
57 
58 namespace Example2 {
59 
60 inline const flatbuffers::TypeTable *MonsterTypeTable();
61 
62 }  // namespace Example2
63 
64 namespace Example {
65 
66 inline const flatbuffers::TypeTable *TestTypeTable();
67 
68 inline const flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable();
69 
70 inline const flatbuffers::TypeTable *Vec3TypeTable();
71 
72 inline const flatbuffers::TypeTable *AbilityTypeTable();
73 
74 inline const flatbuffers::TypeTable *StructOfStructsTypeTable();
75 
76 inline const flatbuffers::TypeTable *StatTypeTable();
77 
78 inline const flatbuffers::TypeTable *ReferrableTypeTable();
79 
80 inline const flatbuffers::TypeTable *MonsterTypeTable();
81 
82 inline const flatbuffers::TypeTable *TypeAliasesTypeTable();
83 
84 /// Composite components of Monster color.
85 enum class Color : uint8_t {
86   Red = 1,
87   /// \brief color Green
88   /// Green is bit_flag with value (1u << 1)
89   Green = 2,
90   /// \brief color Blue (1u << 3)
91   Blue = 8,
92   NONE = 0,
93   ANY = 11
94 };
FLATBUFFERS_DEFINE_BITMASK_OPERATORS(Color,uint8_t)95 FLATBUFFERS_DEFINE_BITMASK_OPERATORS(Color, uint8_t)
96 
97 inline const Color (&EnumValuesColor())[3] {
98   static const Color values[] = {
99     Color::Red,
100     Color::Green,
101     Color::Blue
102   };
103   return values;
104 }
105 
EnumNamesColor()106 inline const char * const *EnumNamesColor() {
107   static const char * const names[9] = {
108     "Red",
109     "Green",
110     "",
111     "",
112     "",
113     "",
114     "",
115     "Blue",
116     nullptr
117   };
118   return names;
119 }
120 
EnumNameColor(Color e)121 inline const char *EnumNameColor(Color e) {
122   if (flatbuffers::IsOutRange(e, Color::Red, Color::Blue)) return "";
123   const size_t index = static_cast<size_t>(e) - static_cast<size_t>(Color::Red);
124   return EnumNamesColor()[index];
125 }
126 
127 enum class Race : int8_t {
128   None = -1,
129   Human = 0,
130   Dwarf = 1,
131   Elf = 2,
132   MIN = None,
133   MAX = Elf
134 };
135 
EnumValuesRace()136 inline const Race (&EnumValuesRace())[4] {
137   static const Race values[] = {
138     Race::None,
139     Race::Human,
140     Race::Dwarf,
141     Race::Elf
142   };
143   return values;
144 }
145 
EnumNamesRace()146 inline const char * const *EnumNamesRace() {
147   static const char * const names[5] = {
148     "None",
149     "Human",
150     "Dwarf",
151     "Elf",
152     nullptr
153   };
154   return names;
155 }
156 
EnumNameRace(Race e)157 inline const char *EnumNameRace(Race e) {
158   if (flatbuffers::IsOutRange(e, Race::None, Race::Elf)) return "";
159   const size_t index = static_cast<size_t>(e) - static_cast<size_t>(Race::None);
160   return EnumNamesRace()[index];
161 }
162 
163 enum class Any : uint8_t {
164   NONE = 0,
165   Monster = 1,
166   TestSimpleTableWithEnum = 2,
167   MyGame_Example2_Monster = 3,
168   MIN = NONE,
169   MAX = MyGame_Example2_Monster
170 };
171 
EnumValuesAny()172 inline const Any (&EnumValuesAny())[4] {
173   static const Any values[] = {
174     Any::NONE,
175     Any::Monster,
176     Any::TestSimpleTableWithEnum,
177     Any::MyGame_Example2_Monster
178   };
179   return values;
180 }
181 
EnumNamesAny()182 inline const char * const *EnumNamesAny() {
183   static const char * const names[5] = {
184     "NONE",
185     "Monster",
186     "TestSimpleTableWithEnum",
187     "MyGame_Example2_Monster",
188     nullptr
189   };
190   return names;
191 }
192 
EnumNameAny(Any e)193 inline const char *EnumNameAny(Any e) {
194   if (flatbuffers::IsOutRange(e, Any::NONE, Any::MyGame_Example2_Monster)) return "";
195   const size_t index = static_cast<size_t>(e);
196   return EnumNamesAny()[index];
197 }
198 
199 template<typename T> struct AnyTraits {
200   static const Any enum_value = Any::NONE;
201 };
202 
203 template<> struct AnyTraits<MyGame::Example::Monster> {
204   static const Any enum_value = Any::Monster;
205 };
206 
207 template<> struct AnyTraits<MyGame::Example::TestSimpleTableWithEnum> {
208   static const Any enum_value = Any::TestSimpleTableWithEnum;
209 };
210 
211 template<> struct AnyTraits<MyGame::Example2::Monster> {
212   static const Any enum_value = Any::MyGame_Example2_Monster;
213 };
214 
215 struct AnyUnion {
216   Any type;
217   void *value;
218 
219   AnyUnion() : type(Any::NONE), value(nullptr) {}
220   AnyUnion(AnyUnion&& u) FLATBUFFERS_NOEXCEPT :
221     type(Any::NONE), value(nullptr)
222     { std::swap(type, u.type); std::swap(value, u.value); }
223   AnyUnion(const AnyUnion &);
224   AnyUnion &operator=(const AnyUnion &u)
225     { AnyUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
226   AnyUnion &operator=(AnyUnion &&u) FLATBUFFERS_NOEXCEPT
227     { std::swap(type, u.type); std::swap(value, u.value); return *this; }
228   ~AnyUnion() { Reset(); }
229 
230   void Reset();
231 
232 #ifndef FLATBUFFERS_CPP98_STL
233   template <typename T>
234   void Set(T&& val) {
235     using RT = typename std::remove_reference<T>::type;
236     Reset();
237     type = AnyTraits<typename RT::TableType>::enum_value;
238     if (type != Any::NONE) {
239       value = new RT(std::forward<T>(val));
240     }
241   }
242 #endif  // FLATBUFFERS_CPP98_STL
243 
244   static void *UnPack(const void *obj, Any type, const flatbuffers::resolver_function_t *resolver);
245   flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
246 
247   MyGame::Example::MonsterT *AsMonster() {
248     return type == Any::Monster ?
249       reinterpret_cast<MyGame::Example::MonsterT *>(value) : nullptr;
250   }
251   const MyGame::Example::MonsterT *AsMonster() const {
252     return type == Any::Monster ?
253       reinterpret_cast<const MyGame::Example::MonsterT *>(value) : nullptr;
254   }
255   MyGame::Example::TestSimpleTableWithEnumT *AsTestSimpleTableWithEnum() {
256     return type == Any::TestSimpleTableWithEnum ?
257       reinterpret_cast<MyGame::Example::TestSimpleTableWithEnumT *>(value) : nullptr;
258   }
259   const MyGame::Example::TestSimpleTableWithEnumT *AsTestSimpleTableWithEnum() const {
260     return type == Any::TestSimpleTableWithEnum ?
261       reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnumT *>(value) : nullptr;
262   }
263   MyGame::Example2::MonsterT *AsMyGame_Example2_Monster() {
264     return type == Any::MyGame_Example2_Monster ?
265       reinterpret_cast<MyGame::Example2::MonsterT *>(value) : nullptr;
266   }
267   const MyGame::Example2::MonsterT *AsMyGame_Example2_Monster() const {
268     return type == Any::MyGame_Example2_Monster ?
269       reinterpret_cast<const MyGame::Example2::MonsterT *>(value) : nullptr;
270   }
271 };
272 
273 bool VerifyAny(flatbuffers::Verifier &verifier, const void *obj, Any type);
274 bool VerifyAnyVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
275 
276 enum class AnyUniqueAliases : uint8_t {
277   NONE = 0,
278   M = 1,
279   TS = 2,
280   M2 = 3,
281   MIN = NONE,
282   MAX = M2
283 };
284 
285 inline const AnyUniqueAliases (&EnumValuesAnyUniqueAliases())[4] {
286   static const AnyUniqueAliases values[] = {
287     AnyUniqueAliases::NONE,
288     AnyUniqueAliases::M,
289     AnyUniqueAliases::TS,
290     AnyUniqueAliases::M2
291   };
292   return values;
293 }
294 
295 inline const char * const *EnumNamesAnyUniqueAliases() {
296   static const char * const names[5] = {
297     "NONE",
298     "M",
299     "TS",
300     "M2",
301     nullptr
302   };
303   return names;
304 }
305 
306 inline const char *EnumNameAnyUniqueAliases(AnyUniqueAliases e) {
307   if (flatbuffers::IsOutRange(e, AnyUniqueAliases::NONE, AnyUniqueAliases::M2)) return "";
308   const size_t index = static_cast<size_t>(e);
309   return EnumNamesAnyUniqueAliases()[index];
310 }
311 
312 template<typename T> struct AnyUniqueAliasesTraits {
313   static const AnyUniqueAliases enum_value = AnyUniqueAliases::NONE;
314 };
315 
316 template<> struct AnyUniqueAliasesTraits<MyGame::Example::Monster> {
317   static const AnyUniqueAliases enum_value = AnyUniqueAliases::M;
318 };
319 
320 template<> struct AnyUniqueAliasesTraits<MyGame::Example::TestSimpleTableWithEnum> {
321   static const AnyUniqueAliases enum_value = AnyUniqueAliases::TS;
322 };
323 
324 template<> struct AnyUniqueAliasesTraits<MyGame::Example2::Monster> {
325   static const AnyUniqueAliases enum_value = AnyUniqueAliases::M2;
326 };
327 
328 struct AnyUniqueAliasesUnion {
329   AnyUniqueAliases type;
330   void *value;
331 
332   AnyUniqueAliasesUnion() : type(AnyUniqueAliases::NONE), value(nullptr) {}
333   AnyUniqueAliasesUnion(AnyUniqueAliasesUnion&& u) FLATBUFFERS_NOEXCEPT :
334     type(AnyUniqueAliases::NONE), value(nullptr)
335     { std::swap(type, u.type); std::swap(value, u.value); }
336   AnyUniqueAliasesUnion(const AnyUniqueAliasesUnion &);
337   AnyUniqueAliasesUnion &operator=(const AnyUniqueAliasesUnion &u)
338     { AnyUniqueAliasesUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
339   AnyUniqueAliasesUnion &operator=(AnyUniqueAliasesUnion &&u) FLATBUFFERS_NOEXCEPT
340     { std::swap(type, u.type); std::swap(value, u.value); return *this; }
341   ~AnyUniqueAliasesUnion() { Reset(); }
342 
343   void Reset();
344 
345 #ifndef FLATBUFFERS_CPP98_STL
346   template <typename T>
347   void Set(T&& val) {
348     using RT = typename std::remove_reference<T>::type;
349     Reset();
350     type = AnyUniqueAliasesTraits<typename RT::TableType>::enum_value;
351     if (type != AnyUniqueAliases::NONE) {
352       value = new RT(std::forward<T>(val));
353     }
354   }
355 #endif  // FLATBUFFERS_CPP98_STL
356 
357   static void *UnPack(const void *obj, AnyUniqueAliases type, const flatbuffers::resolver_function_t *resolver);
358   flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
359 
360   MyGame::Example::MonsterT *AsM() {
361     return type == AnyUniqueAliases::M ?
362       reinterpret_cast<MyGame::Example::MonsterT *>(value) : nullptr;
363   }
364   const MyGame::Example::MonsterT *AsM() const {
365     return type == AnyUniqueAliases::M ?
366       reinterpret_cast<const MyGame::Example::MonsterT *>(value) : nullptr;
367   }
368   MyGame::Example::TestSimpleTableWithEnumT *AsTS() {
369     return type == AnyUniqueAliases::TS ?
370       reinterpret_cast<MyGame::Example::TestSimpleTableWithEnumT *>(value) : nullptr;
371   }
372   const MyGame::Example::TestSimpleTableWithEnumT *AsTS() const {
373     return type == AnyUniqueAliases::TS ?
374       reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnumT *>(value) : nullptr;
375   }
376   MyGame::Example2::MonsterT *AsM2() {
377     return type == AnyUniqueAliases::M2 ?
378       reinterpret_cast<MyGame::Example2::MonsterT *>(value) : nullptr;
379   }
380   const MyGame::Example2::MonsterT *AsM2() const {
381     return type == AnyUniqueAliases::M2 ?
382       reinterpret_cast<const MyGame::Example2::MonsterT *>(value) : nullptr;
383   }
384 };
385 
386 bool VerifyAnyUniqueAliases(flatbuffers::Verifier &verifier, const void *obj, AnyUniqueAliases type);
387 bool VerifyAnyUniqueAliasesVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
388 
389 enum class AnyAmbiguousAliases : uint8_t {
390   NONE = 0,
391   M1 = 1,
392   M2 = 2,
393   M3 = 3,
394   MIN = NONE,
395   MAX = M3
396 };
397 
398 inline const AnyAmbiguousAliases (&EnumValuesAnyAmbiguousAliases())[4] {
399   static const AnyAmbiguousAliases values[] = {
400     AnyAmbiguousAliases::NONE,
401     AnyAmbiguousAliases::M1,
402     AnyAmbiguousAliases::M2,
403     AnyAmbiguousAliases::M3
404   };
405   return values;
406 }
407 
408 inline const char * const *EnumNamesAnyAmbiguousAliases() {
409   static const char * const names[5] = {
410     "NONE",
411     "M1",
412     "M2",
413     "M3",
414     nullptr
415   };
416   return names;
417 }
418 
419 inline const char *EnumNameAnyAmbiguousAliases(AnyAmbiguousAliases e) {
420   if (flatbuffers::IsOutRange(e, AnyAmbiguousAliases::NONE, AnyAmbiguousAliases::M3)) return "";
421   const size_t index = static_cast<size_t>(e);
422   return EnumNamesAnyAmbiguousAliases()[index];
423 }
424 
425 struct AnyAmbiguousAliasesUnion {
426   AnyAmbiguousAliases type;
427   void *value;
428 
429   AnyAmbiguousAliasesUnion() : type(AnyAmbiguousAliases::NONE), value(nullptr) {}
430   AnyAmbiguousAliasesUnion(AnyAmbiguousAliasesUnion&& u) FLATBUFFERS_NOEXCEPT :
431     type(AnyAmbiguousAliases::NONE), value(nullptr)
432     { std::swap(type, u.type); std::swap(value, u.value); }
433   AnyAmbiguousAliasesUnion(const AnyAmbiguousAliasesUnion &);
434   AnyAmbiguousAliasesUnion &operator=(const AnyAmbiguousAliasesUnion &u)
435     { AnyAmbiguousAliasesUnion t(u); std::swap(type, t.type); std::swap(value, t.value); return *this; }
436   AnyAmbiguousAliasesUnion &operator=(AnyAmbiguousAliasesUnion &&u) FLATBUFFERS_NOEXCEPT
437     { std::swap(type, u.type); std::swap(value, u.value); return *this; }
438   ~AnyAmbiguousAliasesUnion() { Reset(); }
439 
440   void Reset();
441 
442   static void *UnPack(const void *obj, AnyAmbiguousAliases type, const flatbuffers::resolver_function_t *resolver);
443   flatbuffers::Offset<void> Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher = nullptr) const;
444 
445   MyGame::Example::MonsterT *AsM1() {
446     return type == AnyAmbiguousAliases::M1 ?
447       reinterpret_cast<MyGame::Example::MonsterT *>(value) : nullptr;
448   }
449   const MyGame::Example::MonsterT *AsM1() const {
450     return type == AnyAmbiguousAliases::M1 ?
451       reinterpret_cast<const MyGame::Example::MonsterT *>(value) : nullptr;
452   }
453   MyGame::Example::MonsterT *AsM2() {
454     return type == AnyAmbiguousAliases::M2 ?
455       reinterpret_cast<MyGame::Example::MonsterT *>(value) : nullptr;
456   }
457   const MyGame::Example::MonsterT *AsM2() const {
458     return type == AnyAmbiguousAliases::M2 ?
459       reinterpret_cast<const MyGame::Example::MonsterT *>(value) : nullptr;
460   }
461   MyGame::Example::MonsterT *AsM3() {
462     return type == AnyAmbiguousAliases::M3 ?
463       reinterpret_cast<MyGame::Example::MonsterT *>(value) : nullptr;
464   }
465   const MyGame::Example::MonsterT *AsM3() const {
466     return type == AnyAmbiguousAliases::M3 ?
467       reinterpret_cast<const MyGame::Example::MonsterT *>(value) : nullptr;
468   }
469 };
470 
471 bool VerifyAnyAmbiguousAliases(flatbuffers::Verifier &verifier, const void *obj, AnyAmbiguousAliases type);
472 bool VerifyAnyAmbiguousAliasesVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
473 
474 FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(2) Test FLATBUFFERS_FINAL_CLASS {
475  private:
476   int16_t a_;
477   int8_t b_;
478   int8_t padding0__;
479 
480  public:
481   struct Traits;
482   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
483     return TestTypeTable();
484   }
485   Test()
486       : a_(0),
487         b_(0),
488         padding0__(0) {
489     (void)padding0__;
490   }
491   Test(int16_t _a, int8_t _b)
492       : a_(flatbuffers::EndianScalar(_a)),
493         b_(flatbuffers::EndianScalar(_b)),
494         padding0__(0) {
495     (void)padding0__;
496   }
497   int16_t a() const {
498     return flatbuffers::EndianScalar(a_);
499   }
500   void mutate_a(int16_t _a) {
501     flatbuffers::WriteScalar(&a_, _a);
502   }
503   int8_t b() const {
504     return flatbuffers::EndianScalar(b_);
505   }
506   void mutate_b(int8_t _b) {
507     flatbuffers::WriteScalar(&b_, _b);
508   }
509   template<size_t Index>
510   auto get_field() const {
511          if constexpr (Index == 0) return a();
512     else if constexpr (Index == 1) return b();
513     else static_assert(Index != Index, "Invalid Field Index");
514   }
515 };
516 FLATBUFFERS_STRUCT_END(Test, 4);
517 
518 struct Test::Traits {
519   using type = Test;
520   static constexpr auto name = "Test";
521   static constexpr auto fully_qualified_name = "MyGame.Example.Test";
522   static constexpr std::array<const char *, 2> field_names = {
523     "a",
524     "b"
525   };
526   template<size_t Index>
527   using FieldType = decltype(std::declval<type>().get_field<Index>());
528   static constexpr size_t fields_number = 2;
529 };
530 
531 FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Vec3 FLATBUFFERS_FINAL_CLASS {
532  private:
533   float x_;
534   float y_;
535   float z_;
536   int32_t padding0__;
537   double test1_;
538   uint8_t test2_;
539   int8_t padding1__;
540   MyGame::Example::Test test3_;
541   int16_t padding2__;
542 
543  public:
544   struct Traits;
545   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
546     return Vec3TypeTable();
547   }
548   Vec3()
549       : x_(0),
550         y_(0),
551         z_(0),
552         padding0__(0),
553         test1_(0),
554         test2_(0),
555         padding1__(0),
556         test3_(),
557         padding2__(0) {
558     (void)padding0__;
559     (void)padding1__;
560     (void)padding2__;
561   }
562   Vec3(float _x, float _y, float _z, double _test1, MyGame::Example::Color _test2, const MyGame::Example::Test &_test3)
563       : x_(flatbuffers::EndianScalar(_x)),
564         y_(flatbuffers::EndianScalar(_y)),
565         z_(flatbuffers::EndianScalar(_z)),
566         padding0__(0),
567         test1_(flatbuffers::EndianScalar(_test1)),
568         test2_(flatbuffers::EndianScalar(static_cast<uint8_t>(_test2))),
569         padding1__(0),
570         test3_(_test3),
571         padding2__(0) {
572     (void)padding0__;
573     (void)padding1__;
574     (void)padding2__;
575   }
576   float x() const {
577     return flatbuffers::EndianScalar(x_);
578   }
579   void mutate_x(float _x) {
580     flatbuffers::WriteScalar(&x_, _x);
581   }
582   float y() const {
583     return flatbuffers::EndianScalar(y_);
584   }
585   void mutate_y(float _y) {
586     flatbuffers::WriteScalar(&y_, _y);
587   }
588   float z() const {
589     return flatbuffers::EndianScalar(z_);
590   }
591   void mutate_z(float _z) {
592     flatbuffers::WriteScalar(&z_, _z);
593   }
594   double test1() const {
595     return flatbuffers::EndianScalar(test1_);
596   }
597   void mutate_test1(double _test1) {
598     flatbuffers::WriteScalar(&test1_, _test1);
599   }
600   MyGame::Example::Color test2() const {
601     return static_cast<MyGame::Example::Color>(flatbuffers::EndianScalar(test2_));
602   }
603   void mutate_test2(MyGame::Example::Color _test2) {
604     flatbuffers::WriteScalar(&test2_, static_cast<uint8_t>(_test2));
605   }
606   const MyGame::Example::Test &test3() const {
607     return test3_;
608   }
609   MyGame::Example::Test &mutable_test3() {
610     return test3_;
611   }
612   template<size_t Index>
613   auto get_field() const {
614          if constexpr (Index == 0) return x();
615     else if constexpr (Index == 1) return y();
616     else if constexpr (Index == 2) return z();
617     else if constexpr (Index == 3) return test1();
618     else if constexpr (Index == 4) return test2();
619     else if constexpr (Index == 5) return test3();
620     else static_assert(Index != Index, "Invalid Field Index");
621   }
622 };
623 FLATBUFFERS_STRUCT_END(Vec3, 32);
624 
625 struct Vec3::Traits {
626   using type = Vec3;
627   static constexpr auto name = "Vec3";
628   static constexpr auto fully_qualified_name = "MyGame.Example.Vec3";
629   static constexpr std::array<const char *, 6> field_names = {
630     "x",
631     "y",
632     "z",
633     "test1",
634     "test2",
635     "test3"
636   };
637   template<size_t Index>
638   using FieldType = decltype(std::declval<type>().get_field<Index>());
639   static constexpr size_t fields_number = 6;
640 };
641 
642 FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Ability FLATBUFFERS_FINAL_CLASS {
643  private:
644   uint32_t id_;
645   uint32_t distance_;
646 
647  public:
648   struct Traits;
649   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
650     return AbilityTypeTable();
651   }
652   Ability()
653       : id_(0),
654         distance_(0) {
655   }
656   Ability(uint32_t _id, uint32_t _distance)
657       : id_(flatbuffers::EndianScalar(_id)),
658         distance_(flatbuffers::EndianScalar(_distance)) {
659   }
660   uint32_t id() const {
661     return flatbuffers::EndianScalar(id_);
662   }
663   void mutate_id(uint32_t _id) {
664     flatbuffers::WriteScalar(&id_, _id);
665   }
666   bool KeyCompareLessThan(const Ability *o) const {
667     return id() < o->id();
668   }
669   int KeyCompareWithValue(uint32_t val) const {
670     return static_cast<int>(id() > val) - static_cast<int>(id() < val);
671   }
672   uint32_t distance() const {
673     return flatbuffers::EndianScalar(distance_);
674   }
675   void mutate_distance(uint32_t _distance) {
676     flatbuffers::WriteScalar(&distance_, _distance);
677   }
678   template<size_t Index>
679   auto get_field() const {
680          if constexpr (Index == 0) return id();
681     else if constexpr (Index == 1) return distance();
682     else static_assert(Index != Index, "Invalid Field Index");
683   }
684 };
685 FLATBUFFERS_STRUCT_END(Ability, 8);
686 
687 struct Ability::Traits {
688   using type = Ability;
689   static constexpr auto name = "Ability";
690   static constexpr auto fully_qualified_name = "MyGame.Example.Ability";
691   static constexpr std::array<const char *, 2> field_names = {
692     "id",
693     "distance"
694   };
695   template<size_t Index>
696   using FieldType = decltype(std::declval<type>().get_field<Index>());
697   static constexpr size_t fields_number = 2;
698 };
699 
700 FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) StructOfStructs FLATBUFFERS_FINAL_CLASS {
701  private:
702   MyGame::Example::Ability a_;
703   MyGame::Example::Test b_;
704   MyGame::Example::Ability c_;
705 
706  public:
707   struct Traits;
708   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
709     return StructOfStructsTypeTable();
710   }
711   StructOfStructs()
712       : a_(),
713         b_(),
714         c_() {
715   }
716   StructOfStructs(const MyGame::Example::Ability &_a, const MyGame::Example::Test &_b, const MyGame::Example::Ability &_c)
717       : a_(_a),
718         b_(_b),
719         c_(_c) {
720   }
721   const MyGame::Example::Ability &a() const {
722     return a_;
723   }
724   MyGame::Example::Ability &mutable_a() {
725     return a_;
726   }
727   const MyGame::Example::Test &b() const {
728     return b_;
729   }
730   MyGame::Example::Test &mutable_b() {
731     return b_;
732   }
733   const MyGame::Example::Ability &c() const {
734     return c_;
735   }
736   MyGame::Example::Ability &mutable_c() {
737     return c_;
738   }
739   template<size_t Index>
740   auto get_field() const {
741          if constexpr (Index == 0) return a();
742     else if constexpr (Index == 1) return b();
743     else if constexpr (Index == 2) return c();
744     else static_assert(Index != Index, "Invalid Field Index");
745   }
746 };
747 FLATBUFFERS_STRUCT_END(StructOfStructs, 20);
748 
749 struct StructOfStructs::Traits {
750   using type = StructOfStructs;
751   static constexpr auto name = "StructOfStructs";
752   static constexpr auto fully_qualified_name = "MyGame.Example.StructOfStructs";
753   static constexpr std::array<const char *, 3> field_names = {
754     "a",
755     "b",
756     "c"
757   };
758   template<size_t Index>
759   using FieldType = decltype(std::declval<type>().get_field<Index>());
760   static constexpr size_t fields_number = 3;
761 };
762 
763 }  // namespace Example
764 
765 struct InParentNamespaceT : public flatbuffers::NativeTable {
766   typedef InParentNamespace TableType;
767 };
768 
769 struct InParentNamespace FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
770   typedef InParentNamespaceT NativeTableType;
771   typedef InParentNamespaceBuilder Builder;
772   struct Traits;
773   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
774     return InParentNamespaceTypeTable();
775   }
776   bool Verify(flatbuffers::Verifier &verifier) const {
777     return VerifyTableStart(verifier) &&
778            verifier.EndTable();
779   }
780   InParentNamespaceT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
781   void UnPackTo(InParentNamespaceT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
782   static flatbuffers::Offset<InParentNamespace> Pack(flatbuffers::FlatBufferBuilder &_fbb, const InParentNamespaceT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
783 };
784 
785 struct InParentNamespaceBuilder {
786   typedef InParentNamespace Table;
787   flatbuffers::FlatBufferBuilder &fbb_;
788   flatbuffers::uoffset_t start_;
789   explicit InParentNamespaceBuilder(flatbuffers::FlatBufferBuilder &_fbb)
790         : fbb_(_fbb) {
791     start_ = fbb_.StartTable();
792   }
793   flatbuffers::Offset<InParentNamespace> Finish() {
794     const auto end = fbb_.EndTable(start_);
795     auto o = flatbuffers::Offset<InParentNamespace>(end);
796     return o;
797   }
798 };
799 
800 inline flatbuffers::Offset<InParentNamespace> CreateInParentNamespace(
801     flatbuffers::FlatBufferBuilder &_fbb) {
802   InParentNamespaceBuilder builder_(_fbb);
803   return builder_.Finish();
804 }
805 
806 struct InParentNamespace::Traits {
807   using type = InParentNamespace;
808   static auto constexpr Create = CreateInParentNamespace;
809   static constexpr auto name = "InParentNamespace";
810   static constexpr auto fully_qualified_name = "MyGame.InParentNamespace";
811   static constexpr std::array<const char *, 0> field_names = {};
812   static constexpr size_t fields_number = 0;
813 };
814 
815 flatbuffers::Offset<InParentNamespace> CreateInParentNamespace(flatbuffers::FlatBufferBuilder &_fbb, const InParentNamespaceT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
816 
817 namespace Example2 {
818 
819 struct MonsterT : public flatbuffers::NativeTable {
820   typedef Monster TableType;
821 };
822 
823 struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
824   typedef MonsterT NativeTableType;
825   typedef MonsterBuilder Builder;
826   struct Traits;
827   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
828     return MonsterTypeTable();
829   }
830   bool Verify(flatbuffers::Verifier &verifier) const {
831     return VerifyTableStart(verifier) &&
832            verifier.EndTable();
833   }
834   MonsterT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
835   void UnPackTo(MonsterT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
836   static flatbuffers::Offset<Monster> Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
837 };
838 
839 struct MonsterBuilder {
840   typedef Monster Table;
841   flatbuffers::FlatBufferBuilder &fbb_;
842   flatbuffers::uoffset_t start_;
843   explicit MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb)
844         : fbb_(_fbb) {
845     start_ = fbb_.StartTable();
846   }
847   flatbuffers::Offset<Monster> Finish() {
848     const auto end = fbb_.EndTable(start_);
849     auto o = flatbuffers::Offset<Monster>(end);
850     return o;
851   }
852 };
853 
854 inline flatbuffers::Offset<Monster> CreateMonster(
855     flatbuffers::FlatBufferBuilder &_fbb) {
856   MonsterBuilder builder_(_fbb);
857   return builder_.Finish();
858 }
859 
860 struct Monster::Traits {
861   using type = Monster;
862   static auto constexpr Create = CreateMonster;
863   static constexpr auto name = "Monster";
864   static constexpr auto fully_qualified_name = "MyGame.Example2.Monster";
865   static constexpr std::array<const char *, 0> field_names = {};
866   static constexpr size_t fields_number = 0;
867 };
868 
869 flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
870 
871 }  // namespace Example2
872 
873 namespace Example {
874 
875 struct TestSimpleTableWithEnumT : public flatbuffers::NativeTable {
876   typedef TestSimpleTableWithEnum TableType;
877   MyGame::Example::Color color = MyGame::Example::Color::Green;
878 };
879 
880 struct TestSimpleTableWithEnum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
881   typedef TestSimpleTableWithEnumT NativeTableType;
882   typedef TestSimpleTableWithEnumBuilder Builder;
883   struct Traits;
884   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
885     return TestSimpleTableWithEnumTypeTable();
886   }
887   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
888     VT_COLOR = 4
889   };
890   MyGame::Example::Color color() const {
891     return static_cast<MyGame::Example::Color>(GetField<uint8_t>(VT_COLOR, 2));
892   }
893   bool mutate_color(MyGame::Example::Color _color) {
894     return SetField<uint8_t>(VT_COLOR, static_cast<uint8_t>(_color), 2);
895   }
896   template<size_t Index>
897   auto get_field() const {
898          if constexpr (Index == 0) return color();
899     else static_assert(Index != Index, "Invalid Field Index");
900   }
901   bool Verify(flatbuffers::Verifier &verifier) const {
902     return VerifyTableStart(verifier) &&
903            VerifyField<uint8_t>(verifier, VT_COLOR) &&
904            verifier.EndTable();
905   }
906   TestSimpleTableWithEnumT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
907   void UnPackTo(TestSimpleTableWithEnumT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
908   static flatbuffers::Offset<TestSimpleTableWithEnum> Pack(flatbuffers::FlatBufferBuilder &_fbb, const TestSimpleTableWithEnumT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
909 };
910 
911 struct TestSimpleTableWithEnumBuilder {
912   typedef TestSimpleTableWithEnum Table;
913   flatbuffers::FlatBufferBuilder &fbb_;
914   flatbuffers::uoffset_t start_;
915   void add_color(MyGame::Example::Color color) {
916     fbb_.AddElement<uint8_t>(TestSimpleTableWithEnum::VT_COLOR, static_cast<uint8_t>(color), 2);
917   }
918   explicit TestSimpleTableWithEnumBuilder(flatbuffers::FlatBufferBuilder &_fbb)
919         : fbb_(_fbb) {
920     start_ = fbb_.StartTable();
921   }
922   flatbuffers::Offset<TestSimpleTableWithEnum> Finish() {
923     const auto end = fbb_.EndTable(start_);
924     auto o = flatbuffers::Offset<TestSimpleTableWithEnum>(end);
925     return o;
926   }
927 };
928 
929 inline flatbuffers::Offset<TestSimpleTableWithEnum> CreateTestSimpleTableWithEnum(
930     flatbuffers::FlatBufferBuilder &_fbb,
931     MyGame::Example::Color color = MyGame::Example::Color::Green) {
932   TestSimpleTableWithEnumBuilder builder_(_fbb);
933   builder_.add_color(color);
934   return builder_.Finish();
935 }
936 
937 struct TestSimpleTableWithEnum::Traits {
938   using type = TestSimpleTableWithEnum;
939   static auto constexpr Create = CreateTestSimpleTableWithEnum;
940   static constexpr auto name = "TestSimpleTableWithEnum";
941   static constexpr auto fully_qualified_name = "MyGame.Example.TestSimpleTableWithEnum";
942   static constexpr std::array<const char *, 1> field_names = {
943     "color"
944   };
945   template<size_t Index>
946   using FieldType = decltype(std::declval<type>().get_field<Index>());
947   static constexpr size_t fields_number = 1;
948 };
949 
950 flatbuffers::Offset<TestSimpleTableWithEnum> CreateTestSimpleTableWithEnum(flatbuffers::FlatBufferBuilder &_fbb, const TestSimpleTableWithEnumT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
951 
952 struct StatT : public flatbuffers::NativeTable {
953   typedef Stat TableType;
954   std::string id{};
955   int64_t val = 0;
956   uint16_t count = 0;
957 };
958 
959 struct Stat FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
960   typedef StatT NativeTableType;
961   typedef StatBuilder Builder;
962   struct Traits;
963   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
964     return StatTypeTable();
965   }
966   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
967     VT_ID = 4,
968     VT_VAL = 6,
969     VT_COUNT = 8
970   };
971   const flatbuffers::String *id() const {
972     return GetPointer<const flatbuffers::String *>(VT_ID);
973   }
974   flatbuffers::String *mutable_id() {
975     return GetPointer<flatbuffers::String *>(VT_ID);
976   }
977   int64_t val() const {
978     return GetField<int64_t>(VT_VAL, 0);
979   }
980   bool mutate_val(int64_t _val) {
981     return SetField<int64_t>(VT_VAL, _val, 0);
982   }
983   uint16_t count() const {
984     return GetField<uint16_t>(VT_COUNT, 0);
985   }
986   bool mutate_count(uint16_t _count) {
987     return SetField<uint16_t>(VT_COUNT, _count, 0);
988   }
989   bool KeyCompareLessThan(const Stat *o) const {
990     return count() < o->count();
991   }
992   int KeyCompareWithValue(uint16_t val) const {
993     return static_cast<int>(count() > val) - static_cast<int>(count() < val);
994   }
995   template<size_t Index>
996   auto get_field() const {
997          if constexpr (Index == 0) return id();
998     else if constexpr (Index == 1) return val();
999     else if constexpr (Index == 2) return count();
1000     else static_assert(Index != Index, "Invalid Field Index");
1001   }
1002   bool Verify(flatbuffers::Verifier &verifier) const {
1003     return VerifyTableStart(verifier) &&
1004            VerifyOffset(verifier, VT_ID) &&
1005            verifier.VerifyString(id()) &&
1006            VerifyField<int64_t>(verifier, VT_VAL) &&
1007            VerifyField<uint16_t>(verifier, VT_COUNT) &&
1008            verifier.EndTable();
1009   }
1010   StatT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
1011   void UnPackTo(StatT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
1012   static flatbuffers::Offset<Stat> Pack(flatbuffers::FlatBufferBuilder &_fbb, const StatT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
1013 };
1014 
1015 struct StatBuilder {
1016   typedef Stat Table;
1017   flatbuffers::FlatBufferBuilder &fbb_;
1018   flatbuffers::uoffset_t start_;
1019   void add_id(flatbuffers::Offset<flatbuffers::String> id) {
1020     fbb_.AddOffset(Stat::VT_ID, id);
1021   }
1022   void add_val(int64_t val) {
1023     fbb_.AddElement<int64_t>(Stat::VT_VAL, val, 0);
1024   }
1025   void add_count(uint16_t count) {
1026     fbb_.AddElement<uint16_t>(Stat::VT_COUNT, count, 0);
1027   }
1028   explicit StatBuilder(flatbuffers::FlatBufferBuilder &_fbb)
1029         : fbb_(_fbb) {
1030     start_ = fbb_.StartTable();
1031   }
1032   flatbuffers::Offset<Stat> Finish() {
1033     const auto end = fbb_.EndTable(start_);
1034     auto o = flatbuffers::Offset<Stat>(end);
1035     return o;
1036   }
1037 };
1038 
1039 inline flatbuffers::Offset<Stat> CreateStat(
1040     flatbuffers::FlatBufferBuilder &_fbb,
1041     flatbuffers::Offset<flatbuffers::String> id = 0,
1042     int64_t val = 0,
1043     uint16_t count = 0) {
1044   StatBuilder builder_(_fbb);
1045   builder_.add_val(val);
1046   builder_.add_id(id);
1047   builder_.add_count(count);
1048   return builder_.Finish();
1049 }
1050 
1051 struct Stat::Traits {
1052   using type = Stat;
1053   static auto constexpr Create = CreateStat;
1054   static constexpr auto name = "Stat";
1055   static constexpr auto fully_qualified_name = "MyGame.Example.Stat";
1056   static constexpr std::array<const char *, 3> field_names = {
1057     "id",
1058     "val",
1059     "count"
1060   };
1061   template<size_t Index>
1062   using FieldType = decltype(std::declval<type>().get_field<Index>());
1063   static constexpr size_t fields_number = 3;
1064 };
1065 
1066 inline flatbuffers::Offset<Stat> CreateStatDirect(
1067     flatbuffers::FlatBufferBuilder &_fbb,
1068     const char *id = nullptr,
1069     int64_t val = 0,
1070     uint16_t count = 0) {
1071   auto id__ = id ? _fbb.CreateString(id) : 0;
1072   return MyGame::Example::CreateStat(
1073       _fbb,
1074       id__,
1075       val,
1076       count);
1077 }
1078 
1079 flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb, const StatT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
1080 
1081 struct ReferrableT : public flatbuffers::NativeTable {
1082   typedef Referrable TableType;
1083   uint64_t id = 0;
1084 };
1085 
1086 struct Referrable FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
1087   typedef ReferrableT NativeTableType;
1088   typedef ReferrableBuilder Builder;
1089   struct Traits;
1090   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
1091     return ReferrableTypeTable();
1092   }
1093   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
1094     VT_ID = 4
1095   };
1096   uint64_t id() const {
1097     return GetField<uint64_t>(VT_ID, 0);
1098   }
1099   bool mutate_id(uint64_t _id) {
1100     return SetField<uint64_t>(VT_ID, _id, 0);
1101   }
1102   bool KeyCompareLessThan(const Referrable *o) const {
1103     return id() < o->id();
1104   }
1105   int KeyCompareWithValue(uint64_t val) const {
1106     return static_cast<int>(id() > val) - static_cast<int>(id() < val);
1107   }
1108   template<size_t Index>
1109   auto get_field() const {
1110          if constexpr (Index == 0) return id();
1111     else static_assert(Index != Index, "Invalid Field Index");
1112   }
1113   bool Verify(flatbuffers::Verifier &verifier) const {
1114     return VerifyTableStart(verifier) &&
1115            VerifyField<uint64_t>(verifier, VT_ID) &&
1116            verifier.EndTable();
1117   }
1118   ReferrableT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
1119   void UnPackTo(ReferrableT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
1120   static flatbuffers::Offset<Referrable> Pack(flatbuffers::FlatBufferBuilder &_fbb, const ReferrableT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
1121 };
1122 
1123 struct ReferrableBuilder {
1124   typedef Referrable Table;
1125   flatbuffers::FlatBufferBuilder &fbb_;
1126   flatbuffers::uoffset_t start_;
1127   void add_id(uint64_t id) {
1128     fbb_.AddElement<uint64_t>(Referrable::VT_ID, id, 0);
1129   }
1130   explicit ReferrableBuilder(flatbuffers::FlatBufferBuilder &_fbb)
1131         : fbb_(_fbb) {
1132     start_ = fbb_.StartTable();
1133   }
1134   flatbuffers::Offset<Referrable> Finish() {
1135     const auto end = fbb_.EndTable(start_);
1136     auto o = flatbuffers::Offset<Referrable>(end);
1137     return o;
1138   }
1139 };
1140 
1141 inline flatbuffers::Offset<Referrable> CreateReferrable(
1142     flatbuffers::FlatBufferBuilder &_fbb,
1143     uint64_t id = 0) {
1144   ReferrableBuilder builder_(_fbb);
1145   builder_.add_id(id);
1146   return builder_.Finish();
1147 }
1148 
1149 struct Referrable::Traits {
1150   using type = Referrable;
1151   static auto constexpr Create = CreateReferrable;
1152   static constexpr auto name = "Referrable";
1153   static constexpr auto fully_qualified_name = "MyGame.Example.Referrable";
1154   static constexpr std::array<const char *, 1> field_names = {
1155     "id"
1156   };
1157   template<size_t Index>
1158   using FieldType = decltype(std::declval<type>().get_field<Index>());
1159   static constexpr size_t fields_number = 1;
1160 };
1161 
1162 flatbuffers::Offset<Referrable> CreateReferrable(flatbuffers::FlatBufferBuilder &_fbb, const ReferrableT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
1163 
1164 struct MonsterT : public flatbuffers::NativeTable {
1165   typedef Monster TableType;
1166   std::unique_ptr<MyGame::Example::Vec3> pos{};
1167   int16_t mana = 150;
1168   int16_t hp = 100;
1169   std::string name{};
1170   std::vector<uint8_t> inventory{};
1171   MyGame::Example::Color color = MyGame::Example::Color::Blue;
1172   MyGame::Example::AnyUnion test{};
1173   std::vector<MyGame::Example::Test> test4{};
1174   std::vector<std::string> testarrayofstring{};
1175   std::vector<std::unique_ptr<MyGame::Example::MonsterT>> testarrayoftables{};
1176   std::unique_ptr<MyGame::Example::MonsterT> enemy{};
1177   std::vector<uint8_t> testnestedflatbuffer{};
1178   std::unique_ptr<MyGame::Example::StatT> testempty{};
1179   bool testbool = false;
1180   int32_t testhashs32_fnv1 = 0;
1181   uint32_t testhashu32_fnv1 = 0;
1182   int64_t testhashs64_fnv1 = 0;
1183   uint64_t testhashu64_fnv1 = 0;
1184   int32_t testhashs32_fnv1a = 0;
1185   Stat *testhashu32_fnv1a = nullptr;
1186   int64_t testhashs64_fnv1a = 0;
1187   uint64_t testhashu64_fnv1a = 0;
1188   std::vector<bool> testarrayofbools{};
1189   float testf = 3.14159f;
1190   float testf2 = 3.0f;
1191   float testf3 = 0.0f;
1192   std::vector<std::string> testarrayofstring2{};
1193   std::vector<MyGame::Example::Ability> testarrayofsortedstruct{};
1194   std::vector<uint8_t> flex{};
1195   std::vector<MyGame::Example::Test> test5{};
1196   std::vector<int64_t> vector_of_longs{};
1197   std::vector<double> vector_of_doubles{};
1198   std::unique_ptr<MyGame::InParentNamespaceT> parent_namespace_test{};
1199   std::vector<std::unique_ptr<MyGame::Example::ReferrableT>> vector_of_referrables{};
1200   ReferrableT *single_weak_reference = nullptr;
1201   std::vector<ReferrableT *> vector_of_weak_references{};
1202   std::vector<std::unique_ptr<MyGame::Example::ReferrableT>> vector_of_strong_referrables{};
1203   ReferrableT *co_owning_reference = nullptr;
1204   std::vector<std::unique_ptr<ReferrableT>> vector_of_co_owning_references{};
1205   ReferrableT *non_owning_reference = nullptr;
1206   std::vector<ReferrableT *> vector_of_non_owning_references{};
1207   MyGame::Example::AnyUniqueAliasesUnion any_unique{};
1208   MyGame::Example::AnyAmbiguousAliasesUnion any_ambiguous{};
1209   std::vector<MyGame::Example::Color> vector_of_enums{};
1210   MyGame::Example::Race signed_enum = MyGame::Example::Race::None;
1211   std::vector<uint8_t> testrequirednestedflatbuffer{};
1212   std::vector<std::unique_ptr<MyGame::Example::StatT>> scalar_key_sorted_tables{};
1213 };
1214 
1215 /// an example documentation comment: "monster object"
1216 struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
1217   typedef MonsterT NativeTableType;
1218   typedef MonsterBuilder Builder;
1219   struct Traits;
1220   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
1221     return MonsterTypeTable();
1222   }
1223   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
1224     VT_POS = 4,
1225     VT_MANA = 6,
1226     VT_HP = 8,
1227     VT_NAME = 10,
1228     VT_INVENTORY = 14,
1229     VT_COLOR = 16,
1230     VT_TEST_TYPE = 18,
1231     VT_TEST = 20,
1232     VT_TEST4 = 22,
1233     VT_TESTARRAYOFSTRING = 24,
1234     VT_TESTARRAYOFTABLES = 26,
1235     VT_ENEMY = 28,
1236     VT_TESTNESTEDFLATBUFFER = 30,
1237     VT_TESTEMPTY = 32,
1238     VT_TESTBOOL = 34,
1239     VT_TESTHASHS32_FNV1 = 36,
1240     VT_TESTHASHU32_FNV1 = 38,
1241     VT_TESTHASHS64_FNV1 = 40,
1242     VT_TESTHASHU64_FNV1 = 42,
1243     VT_TESTHASHS32_FNV1A = 44,
1244     VT_TESTHASHU32_FNV1A = 46,
1245     VT_TESTHASHS64_FNV1A = 48,
1246     VT_TESTHASHU64_FNV1A = 50,
1247     VT_TESTARRAYOFBOOLS = 52,
1248     VT_TESTF = 54,
1249     VT_TESTF2 = 56,
1250     VT_TESTF3 = 58,
1251     VT_TESTARRAYOFSTRING2 = 60,
1252     VT_TESTARRAYOFSORTEDSTRUCT = 62,
1253     VT_FLEX = 64,
1254     VT_TEST5 = 66,
1255     VT_VECTOR_OF_LONGS = 68,
1256     VT_VECTOR_OF_DOUBLES = 70,
1257     VT_PARENT_NAMESPACE_TEST = 72,
1258     VT_VECTOR_OF_REFERRABLES = 74,
1259     VT_SINGLE_WEAK_REFERENCE = 76,
1260     VT_VECTOR_OF_WEAK_REFERENCES = 78,
1261     VT_VECTOR_OF_STRONG_REFERRABLES = 80,
1262     VT_CO_OWNING_REFERENCE = 82,
1263     VT_VECTOR_OF_CO_OWNING_REFERENCES = 84,
1264     VT_NON_OWNING_REFERENCE = 86,
1265     VT_VECTOR_OF_NON_OWNING_REFERENCES = 88,
1266     VT_ANY_UNIQUE_TYPE = 90,
1267     VT_ANY_UNIQUE = 92,
1268     VT_ANY_AMBIGUOUS_TYPE = 94,
1269     VT_ANY_AMBIGUOUS = 96,
1270     VT_VECTOR_OF_ENUMS = 98,
1271     VT_SIGNED_ENUM = 100,
1272     VT_TESTREQUIREDNESTEDFLATBUFFER = 102,
1273     VT_SCALAR_KEY_SORTED_TABLES = 104
1274   };
1275   const MyGame::Example::Vec3 *pos() const {
1276     return GetStruct<const MyGame::Example::Vec3 *>(VT_POS);
1277   }
1278   MyGame::Example::Vec3 *mutable_pos() {
1279     return GetStruct<MyGame::Example::Vec3 *>(VT_POS);
1280   }
1281   int16_t mana() const {
1282     return GetField<int16_t>(VT_MANA, 150);
1283   }
1284   bool mutate_mana(int16_t _mana) {
1285     return SetField<int16_t>(VT_MANA, _mana, 150);
1286   }
1287   int16_t hp() const {
1288     return GetField<int16_t>(VT_HP, 100);
1289   }
1290   bool mutate_hp(int16_t _hp) {
1291     return SetField<int16_t>(VT_HP, _hp, 100);
1292   }
1293   const flatbuffers::String *name() const {
1294     return GetPointer<const flatbuffers::String *>(VT_NAME);
1295   }
1296   flatbuffers::String *mutable_name() {
1297     return GetPointer<flatbuffers::String *>(VT_NAME);
1298   }
1299   bool KeyCompareLessThan(const Monster *o) const {
1300     return *name() < *o->name();
1301   }
1302   int KeyCompareWithValue(const char *val) const {
1303     return strcmp(name()->c_str(), val);
1304   }
1305   const flatbuffers::Vector<uint8_t> *inventory() const {
1306     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_INVENTORY);
1307   }
1308   flatbuffers::Vector<uint8_t> *mutable_inventory() {
1309     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_INVENTORY);
1310   }
1311   MyGame::Example::Color color() const {
1312     return static_cast<MyGame::Example::Color>(GetField<uint8_t>(VT_COLOR, 8));
1313   }
1314   bool mutate_color(MyGame::Example::Color _color) {
1315     return SetField<uint8_t>(VT_COLOR, static_cast<uint8_t>(_color), 8);
1316   }
1317   MyGame::Example::Any test_type() const {
1318     return static_cast<MyGame::Example::Any>(GetField<uint8_t>(VT_TEST_TYPE, 0));
1319   }
1320   const void *test() const {
1321     return GetPointer<const void *>(VT_TEST);
1322   }
1323   template<typename T> const T *test_as() const;
1324   const MyGame::Example::Monster *test_as_Monster() const {
1325     return test_type() == MyGame::Example::Any::Monster ? static_cast<const MyGame::Example::Monster *>(test()) : nullptr;
1326   }
1327   const MyGame::Example::TestSimpleTableWithEnum *test_as_TestSimpleTableWithEnum() const {
1328     return test_type() == MyGame::Example::Any::TestSimpleTableWithEnum ? static_cast<const MyGame::Example::TestSimpleTableWithEnum *>(test()) : nullptr;
1329   }
1330   const MyGame::Example2::Monster *test_as_MyGame_Example2_Monster() const {
1331     return test_type() == MyGame::Example::Any::MyGame_Example2_Monster ? static_cast<const MyGame::Example2::Monster *>(test()) : nullptr;
1332   }
1333   void *mutable_test() {
1334     return GetPointer<void *>(VT_TEST);
1335   }
1336   const flatbuffers::Vector<const MyGame::Example::Test *> *test4() const {
1337     return GetPointer<const flatbuffers::Vector<const MyGame::Example::Test *> *>(VT_TEST4);
1338   }
1339   flatbuffers::Vector<const MyGame::Example::Test *> *mutable_test4() {
1340     return GetPointer<flatbuffers::Vector<const MyGame::Example::Test *> *>(VT_TEST4);
1341   }
1342   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring() const {
1343     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_TESTARRAYOFSTRING);
1344   }
1345   flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *mutable_testarrayofstring() {
1346     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_TESTARRAYOFSTRING);
1347   }
1348   /// an example documentation comment: this will end up in the generated code
1349   /// multiline too
1350   const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Monster>> *testarrayoftables() const {
1351     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Monster>> *>(VT_TESTARRAYOFTABLES);
1352   }
1353   flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Monster>> *mutable_testarrayoftables() {
1354     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Monster>> *>(VT_TESTARRAYOFTABLES);
1355   }
1356   const MyGame::Example::Monster *enemy() const {
1357     return GetPointer<const MyGame::Example::Monster *>(VT_ENEMY);
1358   }
1359   MyGame::Example::Monster *mutable_enemy() {
1360     return GetPointer<MyGame::Example::Monster *>(VT_ENEMY);
1361   }
1362   const flatbuffers::Vector<uint8_t> *testnestedflatbuffer() const {
1363     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_TESTNESTEDFLATBUFFER);
1364   }
1365   flatbuffers::Vector<uint8_t> *mutable_testnestedflatbuffer() {
1366     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_TESTNESTEDFLATBUFFER);
1367   }
1368   const MyGame::Example::Monster *testnestedflatbuffer_nested_root() const {
1369     return flatbuffers::GetRoot<MyGame::Example::Monster>(testnestedflatbuffer()->Data());
1370   }
1371   const MyGame::Example::Stat *testempty() const {
1372     return GetPointer<const MyGame::Example::Stat *>(VT_TESTEMPTY);
1373   }
1374   MyGame::Example::Stat *mutable_testempty() {
1375     return GetPointer<MyGame::Example::Stat *>(VT_TESTEMPTY);
1376   }
1377   bool testbool() const {
1378     return GetField<uint8_t>(VT_TESTBOOL, 0) != 0;
1379   }
1380   bool mutate_testbool(bool _testbool) {
1381     return SetField<uint8_t>(VT_TESTBOOL, static_cast<uint8_t>(_testbool), 0);
1382   }
1383   int32_t testhashs32_fnv1() const {
1384     return GetField<int32_t>(VT_TESTHASHS32_FNV1, 0);
1385   }
1386   bool mutate_testhashs32_fnv1(int32_t _testhashs32_fnv1) {
1387     return SetField<int32_t>(VT_TESTHASHS32_FNV1, _testhashs32_fnv1, 0);
1388   }
1389   uint32_t testhashu32_fnv1() const {
1390     return GetField<uint32_t>(VT_TESTHASHU32_FNV1, 0);
1391   }
1392   bool mutate_testhashu32_fnv1(uint32_t _testhashu32_fnv1) {
1393     return SetField<uint32_t>(VT_TESTHASHU32_FNV1, _testhashu32_fnv1, 0);
1394   }
1395   int64_t testhashs64_fnv1() const {
1396     return GetField<int64_t>(VT_TESTHASHS64_FNV1, 0);
1397   }
1398   bool mutate_testhashs64_fnv1(int64_t _testhashs64_fnv1) {
1399     return SetField<int64_t>(VT_TESTHASHS64_FNV1, _testhashs64_fnv1, 0);
1400   }
1401   uint64_t testhashu64_fnv1() const {
1402     return GetField<uint64_t>(VT_TESTHASHU64_FNV1, 0);
1403   }
1404   bool mutate_testhashu64_fnv1(uint64_t _testhashu64_fnv1) {
1405     return SetField<uint64_t>(VT_TESTHASHU64_FNV1, _testhashu64_fnv1, 0);
1406   }
1407   int32_t testhashs32_fnv1a() const {
1408     return GetField<int32_t>(VT_TESTHASHS32_FNV1A, 0);
1409   }
1410   bool mutate_testhashs32_fnv1a(int32_t _testhashs32_fnv1a) {
1411     return SetField<int32_t>(VT_TESTHASHS32_FNV1A, _testhashs32_fnv1a, 0);
1412   }
1413   uint32_t testhashu32_fnv1a() const {
1414     return GetField<uint32_t>(VT_TESTHASHU32_FNV1A, 0);
1415   }
1416   bool mutate_testhashu32_fnv1a(uint32_t _testhashu32_fnv1a) {
1417     return SetField<uint32_t>(VT_TESTHASHU32_FNV1A, _testhashu32_fnv1a, 0);
1418   }
1419   int64_t testhashs64_fnv1a() const {
1420     return GetField<int64_t>(VT_TESTHASHS64_FNV1A, 0);
1421   }
1422   bool mutate_testhashs64_fnv1a(int64_t _testhashs64_fnv1a) {
1423     return SetField<int64_t>(VT_TESTHASHS64_FNV1A, _testhashs64_fnv1a, 0);
1424   }
1425   uint64_t testhashu64_fnv1a() const {
1426     return GetField<uint64_t>(VT_TESTHASHU64_FNV1A, 0);
1427   }
1428   bool mutate_testhashu64_fnv1a(uint64_t _testhashu64_fnv1a) {
1429     return SetField<uint64_t>(VT_TESTHASHU64_FNV1A, _testhashu64_fnv1a, 0);
1430   }
1431   const flatbuffers::Vector<uint8_t> *testarrayofbools() const {
1432     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_TESTARRAYOFBOOLS);
1433   }
1434   flatbuffers::Vector<uint8_t> *mutable_testarrayofbools() {
1435     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_TESTARRAYOFBOOLS);
1436   }
1437   float testf() const {
1438     return GetField<float>(VT_TESTF, 3.14159f);
1439   }
1440   bool mutate_testf(float _testf) {
1441     return SetField<float>(VT_TESTF, _testf, 3.14159f);
1442   }
1443   float testf2() const {
1444     return GetField<float>(VT_TESTF2, 3.0f);
1445   }
1446   bool mutate_testf2(float _testf2) {
1447     return SetField<float>(VT_TESTF2, _testf2, 3.0f);
1448   }
1449   float testf3() const {
1450     return GetField<float>(VT_TESTF3, 0.0f);
1451   }
1452   bool mutate_testf3(float _testf3) {
1453     return SetField<float>(VT_TESTF3, _testf3, 0.0f);
1454   }
1455   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring2() const {
1456     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_TESTARRAYOFSTRING2);
1457   }
1458   flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *mutable_testarrayofstring2() {
1459     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_TESTARRAYOFSTRING2);
1460   }
1461   const flatbuffers::Vector<const MyGame::Example::Ability *> *testarrayofsortedstruct() const {
1462     return GetPointer<const flatbuffers::Vector<const MyGame::Example::Ability *> *>(VT_TESTARRAYOFSORTEDSTRUCT);
1463   }
1464   flatbuffers::Vector<const MyGame::Example::Ability *> *mutable_testarrayofsortedstruct() {
1465     return GetPointer<flatbuffers::Vector<const MyGame::Example::Ability *> *>(VT_TESTARRAYOFSORTEDSTRUCT);
1466   }
1467   const flatbuffers::Vector<uint8_t> *flex() const {
1468     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_FLEX);
1469   }
1470   flatbuffers::Vector<uint8_t> *mutable_flex() {
1471     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_FLEX);
1472   }
1473   flexbuffers::Reference flex_flexbuffer_root() const {
1474     return flexbuffers::GetRoot(flex()->Data(), flex()->size());
1475   }
1476   const flatbuffers::Vector<const MyGame::Example::Test *> *test5() const {
1477     return GetPointer<const flatbuffers::Vector<const MyGame::Example::Test *> *>(VT_TEST5);
1478   }
1479   flatbuffers::Vector<const MyGame::Example::Test *> *mutable_test5() {
1480     return GetPointer<flatbuffers::Vector<const MyGame::Example::Test *> *>(VT_TEST5);
1481   }
1482   const flatbuffers::Vector<int64_t> *vector_of_longs() const {
1483     return GetPointer<const flatbuffers::Vector<int64_t> *>(VT_VECTOR_OF_LONGS);
1484   }
1485   flatbuffers::Vector<int64_t> *mutable_vector_of_longs() {
1486     return GetPointer<flatbuffers::Vector<int64_t> *>(VT_VECTOR_OF_LONGS);
1487   }
1488   const flatbuffers::Vector<double> *vector_of_doubles() const {
1489     return GetPointer<const flatbuffers::Vector<double> *>(VT_VECTOR_OF_DOUBLES);
1490   }
1491   flatbuffers::Vector<double> *mutable_vector_of_doubles() {
1492     return GetPointer<flatbuffers::Vector<double> *>(VT_VECTOR_OF_DOUBLES);
1493   }
1494   const MyGame::InParentNamespace *parent_namespace_test() const {
1495     return GetPointer<const MyGame::InParentNamespace *>(VT_PARENT_NAMESPACE_TEST);
1496   }
1497   MyGame::InParentNamespace *mutable_parent_namespace_test() {
1498     return GetPointer<MyGame::InParentNamespace *>(VT_PARENT_NAMESPACE_TEST);
1499   }
1500   const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *vector_of_referrables() const {
1501     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *>(VT_VECTOR_OF_REFERRABLES);
1502   }
1503   flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *mutable_vector_of_referrables() {
1504     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *>(VT_VECTOR_OF_REFERRABLES);
1505   }
1506   uint64_t single_weak_reference() const {
1507     return GetField<uint64_t>(VT_SINGLE_WEAK_REFERENCE, 0);
1508   }
1509   bool mutate_single_weak_reference(uint64_t _single_weak_reference) {
1510     return SetField<uint64_t>(VT_SINGLE_WEAK_REFERENCE, _single_weak_reference, 0);
1511   }
1512   const flatbuffers::Vector<uint64_t> *vector_of_weak_references() const {
1513     return GetPointer<const flatbuffers::Vector<uint64_t> *>(VT_VECTOR_OF_WEAK_REFERENCES);
1514   }
1515   flatbuffers::Vector<uint64_t> *mutable_vector_of_weak_references() {
1516     return GetPointer<flatbuffers::Vector<uint64_t> *>(VT_VECTOR_OF_WEAK_REFERENCES);
1517   }
1518   const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *vector_of_strong_referrables() const {
1519     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *>(VT_VECTOR_OF_STRONG_REFERRABLES);
1520   }
1521   flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *mutable_vector_of_strong_referrables() {
1522     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>> *>(VT_VECTOR_OF_STRONG_REFERRABLES);
1523   }
1524   uint64_t co_owning_reference() const {
1525     return GetField<uint64_t>(VT_CO_OWNING_REFERENCE, 0);
1526   }
1527   bool mutate_co_owning_reference(uint64_t _co_owning_reference) {
1528     return SetField<uint64_t>(VT_CO_OWNING_REFERENCE, _co_owning_reference, 0);
1529   }
1530   const flatbuffers::Vector<uint64_t> *vector_of_co_owning_references() const {
1531     return GetPointer<const flatbuffers::Vector<uint64_t> *>(VT_VECTOR_OF_CO_OWNING_REFERENCES);
1532   }
1533   flatbuffers::Vector<uint64_t> *mutable_vector_of_co_owning_references() {
1534     return GetPointer<flatbuffers::Vector<uint64_t> *>(VT_VECTOR_OF_CO_OWNING_REFERENCES);
1535   }
1536   uint64_t non_owning_reference() const {
1537     return GetField<uint64_t>(VT_NON_OWNING_REFERENCE, 0);
1538   }
1539   bool mutate_non_owning_reference(uint64_t _non_owning_reference) {
1540     return SetField<uint64_t>(VT_NON_OWNING_REFERENCE, _non_owning_reference, 0);
1541   }
1542   const flatbuffers::Vector<uint64_t> *vector_of_non_owning_references() const {
1543     return GetPointer<const flatbuffers::Vector<uint64_t> *>(VT_VECTOR_OF_NON_OWNING_REFERENCES);
1544   }
1545   flatbuffers::Vector<uint64_t> *mutable_vector_of_non_owning_references() {
1546     return GetPointer<flatbuffers::Vector<uint64_t> *>(VT_VECTOR_OF_NON_OWNING_REFERENCES);
1547   }
1548   MyGame::Example::AnyUniqueAliases any_unique_type() const {
1549     return static_cast<MyGame::Example::AnyUniqueAliases>(GetField<uint8_t>(VT_ANY_UNIQUE_TYPE, 0));
1550   }
1551   const void *any_unique() const {
1552     return GetPointer<const void *>(VT_ANY_UNIQUE);
1553   }
1554   template<typename T> const T *any_unique_as() const;
1555   const MyGame::Example::Monster *any_unique_as_M() const {
1556     return any_unique_type() == MyGame::Example::AnyUniqueAliases::M ? static_cast<const MyGame::Example::Monster *>(any_unique()) : nullptr;
1557   }
1558   const MyGame::Example::TestSimpleTableWithEnum *any_unique_as_TS() const {
1559     return any_unique_type() == MyGame::Example::AnyUniqueAliases::TS ? static_cast<const MyGame::Example::TestSimpleTableWithEnum *>(any_unique()) : nullptr;
1560   }
1561   const MyGame::Example2::Monster *any_unique_as_M2() const {
1562     return any_unique_type() == MyGame::Example::AnyUniqueAliases::M2 ? static_cast<const MyGame::Example2::Monster *>(any_unique()) : nullptr;
1563   }
1564   void *mutable_any_unique() {
1565     return GetPointer<void *>(VT_ANY_UNIQUE);
1566   }
1567   MyGame::Example::AnyAmbiguousAliases any_ambiguous_type() const {
1568     return static_cast<MyGame::Example::AnyAmbiguousAliases>(GetField<uint8_t>(VT_ANY_AMBIGUOUS_TYPE, 0));
1569   }
1570   const void *any_ambiguous() const {
1571     return GetPointer<const void *>(VT_ANY_AMBIGUOUS);
1572   }
1573   const MyGame::Example::Monster *any_ambiguous_as_M1() const {
1574     return any_ambiguous_type() == MyGame::Example::AnyAmbiguousAliases::M1 ? static_cast<const MyGame::Example::Monster *>(any_ambiguous()) : nullptr;
1575   }
1576   const MyGame::Example::Monster *any_ambiguous_as_M2() const {
1577     return any_ambiguous_type() == MyGame::Example::AnyAmbiguousAliases::M2 ? static_cast<const MyGame::Example::Monster *>(any_ambiguous()) : nullptr;
1578   }
1579   const MyGame::Example::Monster *any_ambiguous_as_M3() const {
1580     return any_ambiguous_type() == MyGame::Example::AnyAmbiguousAliases::M3 ? static_cast<const MyGame::Example::Monster *>(any_ambiguous()) : nullptr;
1581   }
1582   void *mutable_any_ambiguous() {
1583     return GetPointer<void *>(VT_ANY_AMBIGUOUS);
1584   }
1585   const flatbuffers::Vector<MyGame::Example::Color> *vector_of_enums() const {
1586     return GetPointer<const flatbuffers::Vector<MyGame::Example::Color> *>(VT_VECTOR_OF_ENUMS);
1587   }
1588   flatbuffers::Vector<MyGame::Example::Color> *mutable_vector_of_enums() {
1589     return GetPointer<flatbuffers::Vector<MyGame::Example::Color> *>(VT_VECTOR_OF_ENUMS);
1590   }
1591   MyGame::Example::Race signed_enum() const {
1592     return static_cast<MyGame::Example::Race>(GetField<int8_t>(VT_SIGNED_ENUM, -1));
1593   }
1594   bool mutate_signed_enum(MyGame::Example::Race _signed_enum) {
1595     return SetField<int8_t>(VT_SIGNED_ENUM, static_cast<int8_t>(_signed_enum), -1);
1596   }
1597   const flatbuffers::Vector<uint8_t> *testrequirednestedflatbuffer() const {
1598     return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_TESTREQUIREDNESTEDFLATBUFFER);
1599   }
1600   flatbuffers::Vector<uint8_t> *mutable_testrequirednestedflatbuffer() {
1601     return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_TESTREQUIREDNESTEDFLATBUFFER);
1602   }
1603   const MyGame::Example::Monster *testrequirednestedflatbuffer_nested_root() const {
1604     return flatbuffers::GetRoot<MyGame::Example::Monster>(testrequirednestedflatbuffer()->Data());
1605   }
1606   const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Stat>> *scalar_key_sorted_tables() const {
1607     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Stat>> *>(VT_SCALAR_KEY_SORTED_TABLES);
1608   }
1609   flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Stat>> *mutable_scalar_key_sorted_tables() {
1610     return GetPointer<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Stat>> *>(VT_SCALAR_KEY_SORTED_TABLES);
1611   }
1612   template<size_t Index>
1613   auto get_field() const {
1614          if constexpr (Index == 0) return pos();
1615     else if constexpr (Index == 1) return mana();
1616     else if constexpr (Index == 2) return hp();
1617     else if constexpr (Index == 3) return name();
1618     else if constexpr (Index == 4) return inventory();
1619     else if constexpr (Index == 5) return color();
1620     else if constexpr (Index == 6) return test_type();
1621     else if constexpr (Index == 7) return test();
1622     else if constexpr (Index == 8) return test4();
1623     else if constexpr (Index == 9) return testarrayofstring();
1624     else if constexpr (Index == 10) return testarrayoftables();
1625     else if constexpr (Index == 11) return enemy();
1626     else if constexpr (Index == 12) return testnestedflatbuffer();
1627     else if constexpr (Index == 13) return testempty();
1628     else if constexpr (Index == 14) return testbool();
1629     else if constexpr (Index == 15) return testhashs32_fnv1();
1630     else if constexpr (Index == 16) return testhashu32_fnv1();
1631     else if constexpr (Index == 17) return testhashs64_fnv1();
1632     else if constexpr (Index == 18) return testhashu64_fnv1();
1633     else if constexpr (Index == 19) return testhashs32_fnv1a();
1634     else if constexpr (Index == 20) return testhashu32_fnv1a();
1635     else if constexpr (Index == 21) return testhashs64_fnv1a();
1636     else if constexpr (Index == 22) return testhashu64_fnv1a();
1637     else if constexpr (Index == 23) return testarrayofbools();
1638     else if constexpr (Index == 24) return testf();
1639     else if constexpr (Index == 25) return testf2();
1640     else if constexpr (Index == 26) return testf3();
1641     else if constexpr (Index == 27) return testarrayofstring2();
1642     else if constexpr (Index == 28) return testarrayofsortedstruct();
1643     else if constexpr (Index == 29) return flex();
1644     else if constexpr (Index == 30) return test5();
1645     else if constexpr (Index == 31) return vector_of_longs();
1646     else if constexpr (Index == 32) return vector_of_doubles();
1647     else if constexpr (Index == 33) return parent_namespace_test();
1648     else if constexpr (Index == 34) return vector_of_referrables();
1649     else if constexpr (Index == 35) return single_weak_reference();
1650     else if constexpr (Index == 36) return vector_of_weak_references();
1651     else if constexpr (Index == 37) return vector_of_strong_referrables();
1652     else if constexpr (Index == 38) return co_owning_reference();
1653     else if constexpr (Index == 39) return vector_of_co_owning_references();
1654     else if constexpr (Index == 40) return non_owning_reference();
1655     else if constexpr (Index == 41) return vector_of_non_owning_references();
1656     else if constexpr (Index == 42) return any_unique_type();
1657     else if constexpr (Index == 43) return any_unique();
1658     else if constexpr (Index == 44) return any_ambiguous_type();
1659     else if constexpr (Index == 45) return any_ambiguous();
1660     else if constexpr (Index == 46) return vector_of_enums();
1661     else if constexpr (Index == 47) return signed_enum();
1662     else if constexpr (Index == 48) return testrequirednestedflatbuffer();
1663     else if constexpr (Index == 49) return scalar_key_sorted_tables();
1664     else static_assert(Index != Index, "Invalid Field Index");
1665   }
1666   bool Verify(flatbuffers::Verifier &verifier) const {
1667     return VerifyTableStart(verifier) &&
1668            VerifyField<MyGame::Example::Vec3>(verifier, VT_POS) &&
1669            VerifyField<int16_t>(verifier, VT_MANA) &&
1670            VerifyField<int16_t>(verifier, VT_HP) &&
1671            VerifyOffsetRequired(verifier, VT_NAME) &&
1672            verifier.VerifyString(name()) &&
1673            VerifyOffset(verifier, VT_INVENTORY) &&
1674            verifier.VerifyVector(inventory()) &&
1675            VerifyField<uint8_t>(verifier, VT_COLOR) &&
1676            VerifyField<uint8_t>(verifier, VT_TEST_TYPE) &&
1677            VerifyOffset(verifier, VT_TEST) &&
1678            VerifyAny(verifier, test(), test_type()) &&
1679            VerifyOffset(verifier, VT_TEST4) &&
1680            verifier.VerifyVector(test4()) &&
1681            VerifyOffset(verifier, VT_TESTARRAYOFSTRING) &&
1682            verifier.VerifyVector(testarrayofstring()) &&
1683            verifier.VerifyVectorOfStrings(testarrayofstring()) &&
1684            VerifyOffset(verifier, VT_TESTARRAYOFTABLES) &&
1685            verifier.VerifyVector(testarrayoftables()) &&
1686            verifier.VerifyVectorOfTables(testarrayoftables()) &&
1687            VerifyOffset(verifier, VT_ENEMY) &&
1688            verifier.VerifyTable(enemy()) &&
1689            VerifyOffset(verifier, VT_TESTNESTEDFLATBUFFER) &&
1690            verifier.VerifyVector(testnestedflatbuffer()) &&
1691            VerifyOffset(verifier, VT_TESTEMPTY) &&
1692            verifier.VerifyTable(testempty()) &&
1693            VerifyField<uint8_t>(verifier, VT_TESTBOOL) &&
1694            VerifyField<int32_t>(verifier, VT_TESTHASHS32_FNV1) &&
1695            VerifyField<uint32_t>(verifier, VT_TESTHASHU32_FNV1) &&
1696            VerifyField<int64_t>(verifier, VT_TESTHASHS64_FNV1) &&
1697            VerifyField<uint64_t>(verifier, VT_TESTHASHU64_FNV1) &&
1698            VerifyField<int32_t>(verifier, VT_TESTHASHS32_FNV1A) &&
1699            VerifyField<uint32_t>(verifier, VT_TESTHASHU32_FNV1A) &&
1700            VerifyField<int64_t>(verifier, VT_TESTHASHS64_FNV1A) &&
1701            VerifyField<uint64_t>(verifier, VT_TESTHASHU64_FNV1A) &&
1702            VerifyOffset(verifier, VT_TESTARRAYOFBOOLS) &&
1703            verifier.VerifyVector(testarrayofbools()) &&
1704            VerifyField<float>(verifier, VT_TESTF) &&
1705            VerifyField<float>(verifier, VT_TESTF2) &&
1706            VerifyField<float>(verifier, VT_TESTF3) &&
1707            VerifyOffset(verifier, VT_TESTARRAYOFSTRING2) &&
1708            verifier.VerifyVector(testarrayofstring2()) &&
1709            verifier.VerifyVectorOfStrings(testarrayofstring2()) &&
1710            VerifyOffset(verifier, VT_TESTARRAYOFSORTEDSTRUCT) &&
1711            verifier.VerifyVector(testarrayofsortedstruct()) &&
1712            VerifyOffset(verifier, VT_FLEX) &&
1713            verifier.VerifyVector(flex()) &&
1714            VerifyOffset(verifier, VT_TEST5) &&
1715            verifier.VerifyVector(test5()) &&
1716            VerifyOffset(verifier, VT_VECTOR_OF_LONGS) &&
1717            verifier.VerifyVector(vector_of_longs()) &&
1718            VerifyOffset(verifier, VT_VECTOR_OF_DOUBLES) &&
1719            verifier.VerifyVector(vector_of_doubles()) &&
1720            VerifyOffset(verifier, VT_PARENT_NAMESPACE_TEST) &&
1721            verifier.VerifyTable(parent_namespace_test()) &&
1722            VerifyOffset(verifier, VT_VECTOR_OF_REFERRABLES) &&
1723            verifier.VerifyVector(vector_of_referrables()) &&
1724            verifier.VerifyVectorOfTables(vector_of_referrables()) &&
1725            VerifyField<uint64_t>(verifier, VT_SINGLE_WEAK_REFERENCE) &&
1726            VerifyOffset(verifier, VT_VECTOR_OF_WEAK_REFERENCES) &&
1727            verifier.VerifyVector(vector_of_weak_references()) &&
1728            VerifyOffset(verifier, VT_VECTOR_OF_STRONG_REFERRABLES) &&
1729            verifier.VerifyVector(vector_of_strong_referrables()) &&
1730            verifier.VerifyVectorOfTables(vector_of_strong_referrables()) &&
1731            VerifyField<uint64_t>(verifier, VT_CO_OWNING_REFERENCE) &&
1732            VerifyOffset(verifier, VT_VECTOR_OF_CO_OWNING_REFERENCES) &&
1733            verifier.VerifyVector(vector_of_co_owning_references()) &&
1734            VerifyField<uint64_t>(verifier, VT_NON_OWNING_REFERENCE) &&
1735            VerifyOffset(verifier, VT_VECTOR_OF_NON_OWNING_REFERENCES) &&
1736            verifier.VerifyVector(vector_of_non_owning_references()) &&
1737            VerifyField<uint8_t>(verifier, VT_ANY_UNIQUE_TYPE) &&
1738            VerifyOffset(verifier, VT_ANY_UNIQUE) &&
1739            VerifyAnyUniqueAliases(verifier, any_unique(), any_unique_type()) &&
1740            VerifyField<uint8_t>(verifier, VT_ANY_AMBIGUOUS_TYPE) &&
1741            VerifyOffset(verifier, VT_ANY_AMBIGUOUS) &&
1742            VerifyAnyAmbiguousAliases(verifier, any_ambiguous(), any_ambiguous_type()) &&
1743            VerifyOffset(verifier, VT_VECTOR_OF_ENUMS) &&
1744            verifier.VerifyVector(vector_of_enums()) &&
1745            VerifyField<int8_t>(verifier, VT_SIGNED_ENUM) &&
1746            VerifyOffset(verifier, VT_TESTREQUIREDNESTEDFLATBUFFER) &&
1747            verifier.VerifyVector(testrequirednestedflatbuffer()) &&
1748            VerifyOffset(verifier, VT_SCALAR_KEY_SORTED_TABLES) &&
1749            verifier.VerifyVector(scalar_key_sorted_tables()) &&
1750            verifier.VerifyVectorOfTables(scalar_key_sorted_tables()) &&
1751            verifier.EndTable();
1752   }
1753   MonsterT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
1754   void UnPackTo(MonsterT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
1755   static flatbuffers::Offset<Monster> Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
1756 };
1757 
1758 template<> inline const MyGame::Example::Monster *Monster::test_as<MyGame::Example::Monster>() const {
1759   return test_as_Monster();
1760 }
1761 
1762 template<> inline const MyGame::Example::TestSimpleTableWithEnum *Monster::test_as<MyGame::Example::TestSimpleTableWithEnum>() const {
1763   return test_as_TestSimpleTableWithEnum();
1764 }
1765 
1766 template<> inline const MyGame::Example2::Monster *Monster::test_as<MyGame::Example2::Monster>() const {
1767   return test_as_MyGame_Example2_Monster();
1768 }
1769 
1770 template<> inline const MyGame::Example::Monster *Monster::any_unique_as<MyGame::Example::Monster>() const {
1771   return any_unique_as_M();
1772 }
1773 
1774 template<> inline const MyGame::Example::TestSimpleTableWithEnum *Monster::any_unique_as<MyGame::Example::TestSimpleTableWithEnum>() const {
1775   return any_unique_as_TS();
1776 }
1777 
1778 template<> inline const MyGame::Example2::Monster *Monster::any_unique_as<MyGame::Example2::Monster>() const {
1779   return any_unique_as_M2();
1780 }
1781 
1782 struct MonsterBuilder {
1783   typedef Monster Table;
1784   flatbuffers::FlatBufferBuilder &fbb_;
1785   flatbuffers::uoffset_t start_;
1786   void add_pos(const MyGame::Example::Vec3 *pos) {
1787     fbb_.AddStruct(Monster::VT_POS, pos);
1788   }
1789   void add_mana(int16_t mana) {
1790     fbb_.AddElement<int16_t>(Monster::VT_MANA, mana, 150);
1791   }
1792   void add_hp(int16_t hp) {
1793     fbb_.AddElement<int16_t>(Monster::VT_HP, hp, 100);
1794   }
1795   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
1796     fbb_.AddOffset(Monster::VT_NAME, name);
1797   }
1798   void add_inventory(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory) {
1799     fbb_.AddOffset(Monster::VT_INVENTORY, inventory);
1800   }
1801   void add_color(MyGame::Example::Color color) {
1802     fbb_.AddElement<uint8_t>(Monster::VT_COLOR, static_cast<uint8_t>(color), 8);
1803   }
1804   void add_test_type(MyGame::Example::Any test_type) {
1805     fbb_.AddElement<uint8_t>(Monster::VT_TEST_TYPE, static_cast<uint8_t>(test_type), 0);
1806   }
1807   void add_test(flatbuffers::Offset<void> test) {
1808     fbb_.AddOffset(Monster::VT_TEST, test);
1809   }
1810   void add_test4(flatbuffers::Offset<flatbuffers::Vector<const MyGame::Example::Test *>> test4) {
1811     fbb_.AddOffset(Monster::VT_TEST4, test4);
1812   }
1813   void add_testarrayofstring(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring) {
1814     fbb_.AddOffset(Monster::VT_TESTARRAYOFSTRING, testarrayofstring);
1815   }
1816   void add_testarrayoftables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Monster>>> testarrayoftables) {
1817     fbb_.AddOffset(Monster::VT_TESTARRAYOFTABLES, testarrayoftables);
1818   }
1819   void add_enemy(flatbuffers::Offset<MyGame::Example::Monster> enemy) {
1820     fbb_.AddOffset(Monster::VT_ENEMY, enemy);
1821   }
1822   void add_testnestedflatbuffer(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer) {
1823     fbb_.AddOffset(Monster::VT_TESTNESTEDFLATBUFFER, testnestedflatbuffer);
1824   }
1825   void add_testempty(flatbuffers::Offset<MyGame::Example::Stat> testempty) {
1826     fbb_.AddOffset(Monster::VT_TESTEMPTY, testempty);
1827   }
1828   void add_testbool(bool testbool) {
1829     fbb_.AddElement<uint8_t>(Monster::VT_TESTBOOL, static_cast<uint8_t>(testbool), 0);
1830   }
1831   void add_testhashs32_fnv1(int32_t testhashs32_fnv1) {
1832     fbb_.AddElement<int32_t>(Monster::VT_TESTHASHS32_FNV1, testhashs32_fnv1, 0);
1833   }
1834   void add_testhashu32_fnv1(uint32_t testhashu32_fnv1) {
1835     fbb_.AddElement<uint32_t>(Monster::VT_TESTHASHU32_FNV1, testhashu32_fnv1, 0);
1836   }
1837   void add_testhashs64_fnv1(int64_t testhashs64_fnv1) {
1838     fbb_.AddElement<int64_t>(Monster::VT_TESTHASHS64_FNV1, testhashs64_fnv1, 0);
1839   }
1840   void add_testhashu64_fnv1(uint64_t testhashu64_fnv1) {
1841     fbb_.AddElement<uint64_t>(Monster::VT_TESTHASHU64_FNV1, testhashu64_fnv1, 0);
1842   }
1843   void add_testhashs32_fnv1a(int32_t testhashs32_fnv1a) {
1844     fbb_.AddElement<int32_t>(Monster::VT_TESTHASHS32_FNV1A, testhashs32_fnv1a, 0);
1845   }
1846   void add_testhashu32_fnv1a(uint32_t testhashu32_fnv1a) {
1847     fbb_.AddElement<uint32_t>(Monster::VT_TESTHASHU32_FNV1A, testhashu32_fnv1a, 0);
1848   }
1849   void add_testhashs64_fnv1a(int64_t testhashs64_fnv1a) {
1850     fbb_.AddElement<int64_t>(Monster::VT_TESTHASHS64_FNV1A, testhashs64_fnv1a, 0);
1851   }
1852   void add_testhashu64_fnv1a(uint64_t testhashu64_fnv1a) {
1853     fbb_.AddElement<uint64_t>(Monster::VT_TESTHASHU64_FNV1A, testhashu64_fnv1a, 0);
1854   }
1855   void add_testarrayofbools(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools) {
1856     fbb_.AddOffset(Monster::VT_TESTARRAYOFBOOLS, testarrayofbools);
1857   }
1858   void add_testf(float testf) {
1859     fbb_.AddElement<float>(Monster::VT_TESTF, testf, 3.14159f);
1860   }
1861   void add_testf2(float testf2) {
1862     fbb_.AddElement<float>(Monster::VT_TESTF2, testf2, 3.0f);
1863   }
1864   void add_testf3(float testf3) {
1865     fbb_.AddElement<float>(Monster::VT_TESTF3, testf3, 0.0f);
1866   }
1867   void add_testarrayofstring2(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring2) {
1868     fbb_.AddOffset(Monster::VT_TESTARRAYOFSTRING2, testarrayofstring2);
1869   }
1870   void add_testarrayofsortedstruct(flatbuffers::Offset<flatbuffers::Vector<const MyGame::Example::Ability *>> testarrayofsortedstruct) {
1871     fbb_.AddOffset(Monster::VT_TESTARRAYOFSORTEDSTRUCT, testarrayofsortedstruct);
1872   }
1873   void add_flex(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> flex) {
1874     fbb_.AddOffset(Monster::VT_FLEX, flex);
1875   }
1876   void add_test5(flatbuffers::Offset<flatbuffers::Vector<const MyGame::Example::Test *>> test5) {
1877     fbb_.AddOffset(Monster::VT_TEST5, test5);
1878   }
1879   void add_vector_of_longs(flatbuffers::Offset<flatbuffers::Vector<int64_t>> vector_of_longs) {
1880     fbb_.AddOffset(Monster::VT_VECTOR_OF_LONGS, vector_of_longs);
1881   }
1882   void add_vector_of_doubles(flatbuffers::Offset<flatbuffers::Vector<double>> vector_of_doubles) {
1883     fbb_.AddOffset(Monster::VT_VECTOR_OF_DOUBLES, vector_of_doubles);
1884   }
1885   void add_parent_namespace_test(flatbuffers::Offset<MyGame::InParentNamespace> parent_namespace_test) {
1886     fbb_.AddOffset(Monster::VT_PARENT_NAMESPACE_TEST, parent_namespace_test);
1887   }
1888   void add_vector_of_referrables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>>> vector_of_referrables) {
1889     fbb_.AddOffset(Monster::VT_VECTOR_OF_REFERRABLES, vector_of_referrables);
1890   }
1891   void add_single_weak_reference(uint64_t single_weak_reference) {
1892     fbb_.AddElement<uint64_t>(Monster::VT_SINGLE_WEAK_REFERENCE, single_weak_reference, 0);
1893   }
1894   void add_vector_of_weak_references(flatbuffers::Offset<flatbuffers::Vector<uint64_t>> vector_of_weak_references) {
1895     fbb_.AddOffset(Monster::VT_VECTOR_OF_WEAK_REFERENCES, vector_of_weak_references);
1896   }
1897   void add_vector_of_strong_referrables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>>> vector_of_strong_referrables) {
1898     fbb_.AddOffset(Monster::VT_VECTOR_OF_STRONG_REFERRABLES, vector_of_strong_referrables);
1899   }
1900   void add_co_owning_reference(uint64_t co_owning_reference) {
1901     fbb_.AddElement<uint64_t>(Monster::VT_CO_OWNING_REFERENCE, co_owning_reference, 0);
1902   }
1903   void add_vector_of_co_owning_references(flatbuffers::Offset<flatbuffers::Vector<uint64_t>> vector_of_co_owning_references) {
1904     fbb_.AddOffset(Monster::VT_VECTOR_OF_CO_OWNING_REFERENCES, vector_of_co_owning_references);
1905   }
1906   void add_non_owning_reference(uint64_t non_owning_reference) {
1907     fbb_.AddElement<uint64_t>(Monster::VT_NON_OWNING_REFERENCE, non_owning_reference, 0);
1908   }
1909   void add_vector_of_non_owning_references(flatbuffers::Offset<flatbuffers::Vector<uint64_t>> vector_of_non_owning_references) {
1910     fbb_.AddOffset(Monster::VT_VECTOR_OF_NON_OWNING_REFERENCES, vector_of_non_owning_references);
1911   }
1912   void add_any_unique_type(MyGame::Example::AnyUniqueAliases any_unique_type) {
1913     fbb_.AddElement<uint8_t>(Monster::VT_ANY_UNIQUE_TYPE, static_cast<uint8_t>(any_unique_type), 0);
1914   }
1915   void add_any_unique(flatbuffers::Offset<void> any_unique) {
1916     fbb_.AddOffset(Monster::VT_ANY_UNIQUE, any_unique);
1917   }
1918   void add_any_ambiguous_type(MyGame::Example::AnyAmbiguousAliases any_ambiguous_type) {
1919     fbb_.AddElement<uint8_t>(Monster::VT_ANY_AMBIGUOUS_TYPE, static_cast<uint8_t>(any_ambiguous_type), 0);
1920   }
1921   void add_any_ambiguous(flatbuffers::Offset<void> any_ambiguous) {
1922     fbb_.AddOffset(Monster::VT_ANY_AMBIGUOUS, any_ambiguous);
1923   }
1924   void add_vector_of_enums(flatbuffers::Offset<flatbuffers::Vector<MyGame::Example::Color>> vector_of_enums) {
1925     fbb_.AddOffset(Monster::VT_VECTOR_OF_ENUMS, vector_of_enums);
1926   }
1927   void add_signed_enum(MyGame::Example::Race signed_enum) {
1928     fbb_.AddElement<int8_t>(Monster::VT_SIGNED_ENUM, static_cast<int8_t>(signed_enum), -1);
1929   }
1930   void add_testrequirednestedflatbuffer(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testrequirednestedflatbuffer) {
1931     fbb_.AddOffset(Monster::VT_TESTREQUIREDNESTEDFLATBUFFER, testrequirednestedflatbuffer);
1932   }
1933   void add_scalar_key_sorted_tables(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Stat>>> scalar_key_sorted_tables) {
1934     fbb_.AddOffset(Monster::VT_SCALAR_KEY_SORTED_TABLES, scalar_key_sorted_tables);
1935   }
1936   explicit MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb)
1937         : fbb_(_fbb) {
1938     start_ = fbb_.StartTable();
1939   }
1940   flatbuffers::Offset<Monster> Finish() {
1941     const auto end = fbb_.EndTable(start_);
1942     auto o = flatbuffers::Offset<Monster>(end);
1943     fbb_.Required(o, Monster::VT_NAME);
1944     return o;
1945   }
1946 };
1947 
1948 inline flatbuffers::Offset<Monster> CreateMonster(
1949     flatbuffers::FlatBufferBuilder &_fbb,
1950     const MyGame::Example::Vec3 *pos = 0,
1951     int16_t mana = 150,
1952     int16_t hp = 100,
1953     flatbuffers::Offset<flatbuffers::String> name = 0,
1954     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> inventory = 0,
1955     MyGame::Example::Color color = MyGame::Example::Color::Blue,
1956     MyGame::Example::Any test_type = MyGame::Example::Any::NONE,
1957     flatbuffers::Offset<void> test = 0,
1958     flatbuffers::Offset<flatbuffers::Vector<const MyGame::Example::Test *>> test4 = 0,
1959     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring = 0,
1960     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Monster>>> testarrayoftables = 0,
1961     flatbuffers::Offset<MyGame::Example::Monster> enemy = 0,
1962     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testnestedflatbuffer = 0,
1963     flatbuffers::Offset<MyGame::Example::Stat> testempty = 0,
1964     bool testbool = false,
1965     int32_t testhashs32_fnv1 = 0,
1966     uint32_t testhashu32_fnv1 = 0,
1967     int64_t testhashs64_fnv1 = 0,
1968     uint64_t testhashu64_fnv1 = 0,
1969     int32_t testhashs32_fnv1a = 0,
1970     uint32_t testhashu32_fnv1a = 0,
1971     int64_t testhashs64_fnv1a = 0,
1972     uint64_t testhashu64_fnv1a = 0,
1973     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools = 0,
1974     float testf = 3.14159f,
1975     float testf2 = 3.0f,
1976     float testf3 = 0.0f,
1977     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> testarrayofstring2 = 0,
1978     flatbuffers::Offset<flatbuffers::Vector<const MyGame::Example::Ability *>> testarrayofsortedstruct = 0,
1979     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> flex = 0,
1980     flatbuffers::Offset<flatbuffers::Vector<const MyGame::Example::Test *>> test5 = 0,
1981     flatbuffers::Offset<flatbuffers::Vector<int64_t>> vector_of_longs = 0,
1982     flatbuffers::Offset<flatbuffers::Vector<double>> vector_of_doubles = 0,
1983     flatbuffers::Offset<MyGame::InParentNamespace> parent_namespace_test = 0,
1984     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>>> vector_of_referrables = 0,
1985     uint64_t single_weak_reference = 0,
1986     flatbuffers::Offset<flatbuffers::Vector<uint64_t>> vector_of_weak_references = 0,
1987     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Referrable>>> vector_of_strong_referrables = 0,
1988     uint64_t co_owning_reference = 0,
1989     flatbuffers::Offset<flatbuffers::Vector<uint64_t>> vector_of_co_owning_references = 0,
1990     uint64_t non_owning_reference = 0,
1991     flatbuffers::Offset<flatbuffers::Vector<uint64_t>> vector_of_non_owning_references = 0,
1992     MyGame::Example::AnyUniqueAliases any_unique_type = MyGame::Example::AnyUniqueAliases::NONE,
1993     flatbuffers::Offset<void> any_unique = 0,
1994     MyGame::Example::AnyAmbiguousAliases any_ambiguous_type = MyGame::Example::AnyAmbiguousAliases::NONE,
1995     flatbuffers::Offset<void> any_ambiguous = 0,
1996     flatbuffers::Offset<flatbuffers::Vector<MyGame::Example::Color>> vector_of_enums = 0,
1997     MyGame::Example::Race signed_enum = MyGame::Example::Race::None,
1998     flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testrequirednestedflatbuffer = 0,
1999     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<MyGame::Example::Stat>>> scalar_key_sorted_tables = 0) {
2000   MonsterBuilder builder_(_fbb);
2001   builder_.add_non_owning_reference(non_owning_reference);
2002   builder_.add_co_owning_reference(co_owning_reference);
2003   builder_.add_single_weak_reference(single_weak_reference);
2004   builder_.add_testhashu64_fnv1a(testhashu64_fnv1a);
2005   builder_.add_testhashs64_fnv1a(testhashs64_fnv1a);
2006   builder_.add_testhashu64_fnv1(testhashu64_fnv1);
2007   builder_.add_testhashs64_fnv1(testhashs64_fnv1);
2008   builder_.add_scalar_key_sorted_tables(scalar_key_sorted_tables);
2009   builder_.add_testrequirednestedflatbuffer(testrequirednestedflatbuffer);
2010   builder_.add_vector_of_enums(vector_of_enums);
2011   builder_.add_any_ambiguous(any_ambiguous);
2012   builder_.add_any_unique(any_unique);
2013   builder_.add_vector_of_non_owning_references(vector_of_non_owning_references);
2014   builder_.add_vector_of_co_owning_references(vector_of_co_owning_references);
2015   builder_.add_vector_of_strong_referrables(vector_of_strong_referrables);
2016   builder_.add_vector_of_weak_references(vector_of_weak_references);
2017   builder_.add_vector_of_referrables(vector_of_referrables);
2018   builder_.add_parent_namespace_test(parent_namespace_test);
2019   builder_.add_vector_of_doubles(vector_of_doubles);
2020   builder_.add_vector_of_longs(vector_of_longs);
2021   builder_.add_test5(test5);
2022   builder_.add_flex(flex);
2023   builder_.add_testarrayofsortedstruct(testarrayofsortedstruct);
2024   builder_.add_testarrayofstring2(testarrayofstring2);
2025   builder_.add_testf3(testf3);
2026   builder_.add_testf2(testf2);
2027   builder_.add_testf(testf);
2028   builder_.add_testarrayofbools(testarrayofbools);
2029   builder_.add_testhashu32_fnv1a(testhashu32_fnv1a);
2030   builder_.add_testhashs32_fnv1a(testhashs32_fnv1a);
2031   builder_.add_testhashu32_fnv1(testhashu32_fnv1);
2032   builder_.add_testhashs32_fnv1(testhashs32_fnv1);
2033   builder_.add_testempty(testempty);
2034   builder_.add_testnestedflatbuffer(testnestedflatbuffer);
2035   builder_.add_enemy(enemy);
2036   builder_.add_testarrayoftables(testarrayoftables);
2037   builder_.add_testarrayofstring(testarrayofstring);
2038   builder_.add_test4(test4);
2039   builder_.add_test(test);
2040   builder_.add_inventory(inventory);
2041   builder_.add_name(name);
2042   builder_.add_pos(pos);
2043   builder_.add_hp(hp);
2044   builder_.add_mana(mana);
2045   builder_.add_signed_enum(signed_enum);
2046   builder_.add_any_ambiguous_type(any_ambiguous_type);
2047   builder_.add_any_unique_type(any_unique_type);
2048   builder_.add_testbool(testbool);
2049   builder_.add_test_type(test_type);
2050   builder_.add_color(color);
2051   return builder_.Finish();
2052 }
2053 
2054 struct Monster::Traits {
2055   using type = Monster;
2056   static auto constexpr Create = CreateMonster;
2057   static constexpr auto name = "Monster";
2058   static constexpr auto fully_qualified_name = "MyGame.Example.Monster";
2059   static constexpr std::array<const char *, 50> field_names = {
2060     "pos",
2061     "mana",
2062     "hp",
2063     "name",
2064     "inventory",
2065     "color",
2066     "test_type",
2067     "test",
2068     "test4",
2069     "testarrayofstring",
2070     "testarrayoftables",
2071     "enemy",
2072     "testnestedflatbuffer",
2073     "testempty",
2074     "testbool",
2075     "testhashs32_fnv1",
2076     "testhashu32_fnv1",
2077     "testhashs64_fnv1",
2078     "testhashu64_fnv1",
2079     "testhashs32_fnv1a",
2080     "testhashu32_fnv1a",
2081     "testhashs64_fnv1a",
2082     "testhashu64_fnv1a",
2083     "testarrayofbools",
2084     "testf",
2085     "testf2",
2086     "testf3",
2087     "testarrayofstring2",
2088     "testarrayofsortedstruct",
2089     "flex",
2090     "test5",
2091     "vector_of_longs",
2092     "vector_of_doubles",
2093     "parent_namespace_test",
2094     "vector_of_referrables",
2095     "single_weak_reference",
2096     "vector_of_weak_references",
2097     "vector_of_strong_referrables",
2098     "co_owning_reference",
2099     "vector_of_co_owning_references",
2100     "non_owning_reference",
2101     "vector_of_non_owning_references",
2102     "any_unique_type",
2103     "any_unique",
2104     "any_ambiguous_type",
2105     "any_ambiguous",
2106     "vector_of_enums",
2107     "signed_enum",
2108     "testrequirednestedflatbuffer",
2109     "scalar_key_sorted_tables"
2110   };
2111   template<size_t Index>
2112   using FieldType = decltype(std::declval<type>().get_field<Index>());
2113   static constexpr size_t fields_number = 50;
2114 };
2115 
2116 inline flatbuffers::Offset<Monster> CreateMonsterDirect(
2117     flatbuffers::FlatBufferBuilder &_fbb,
2118     const MyGame::Example::Vec3 *pos = 0,
2119     int16_t mana = 150,
2120     int16_t hp = 100,
2121     const char *name = nullptr,
2122     const std::vector<uint8_t> *inventory = nullptr,
2123     MyGame::Example::Color color = MyGame::Example::Color::Blue,
2124     MyGame::Example::Any test_type = MyGame::Example::Any::NONE,
2125     flatbuffers::Offset<void> test = 0,
2126     const std::vector<MyGame::Example::Test> *test4 = nullptr,
2127     const std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring = nullptr,
2128     std::vector<flatbuffers::Offset<MyGame::Example::Monster>> *testarrayoftables = nullptr,
2129     flatbuffers::Offset<MyGame::Example::Monster> enemy = 0,
2130     const std::vector<uint8_t> *testnestedflatbuffer = nullptr,
2131     flatbuffers::Offset<MyGame::Example::Stat> testempty = 0,
2132     bool testbool = false,
2133     int32_t testhashs32_fnv1 = 0,
2134     uint32_t testhashu32_fnv1 = 0,
2135     int64_t testhashs64_fnv1 = 0,
2136     uint64_t testhashu64_fnv1 = 0,
2137     int32_t testhashs32_fnv1a = 0,
2138     uint32_t testhashu32_fnv1a = 0,
2139     int64_t testhashs64_fnv1a = 0,
2140     uint64_t testhashu64_fnv1a = 0,
2141     const std::vector<uint8_t> *testarrayofbools = nullptr,
2142     float testf = 3.14159f,
2143     float testf2 = 3.0f,
2144     float testf3 = 0.0f,
2145     const std::vector<flatbuffers::Offset<flatbuffers::String>> *testarrayofstring2 = nullptr,
2146     std::vector<MyGame::Example::Ability> *testarrayofsortedstruct = nullptr,
2147     const std::vector<uint8_t> *flex = nullptr,
2148     const std::vector<MyGame::Example::Test> *test5 = nullptr,
2149     const std::vector<int64_t> *vector_of_longs = nullptr,
2150     const std::vector<double> *vector_of_doubles = nullptr,
2151     flatbuffers::Offset<MyGame::InParentNamespace> parent_namespace_test = 0,
2152     std::vector<flatbuffers::Offset<MyGame::Example::Referrable>> *vector_of_referrables = nullptr,
2153     uint64_t single_weak_reference = 0,
2154     const std::vector<uint64_t> *vector_of_weak_references = nullptr,
2155     std::vector<flatbuffers::Offset<MyGame::Example::Referrable>> *vector_of_strong_referrables = nullptr,
2156     uint64_t co_owning_reference = 0,
2157     const std::vector<uint64_t> *vector_of_co_owning_references = nullptr,
2158     uint64_t non_owning_reference = 0,
2159     const std::vector<uint64_t> *vector_of_non_owning_references = nullptr,
2160     MyGame::Example::AnyUniqueAliases any_unique_type = MyGame::Example::AnyUniqueAliases::NONE,
2161     flatbuffers::Offset<void> any_unique = 0,
2162     MyGame::Example::AnyAmbiguousAliases any_ambiguous_type = MyGame::Example::AnyAmbiguousAliases::NONE,
2163     flatbuffers::Offset<void> any_ambiguous = 0,
2164     const std::vector<MyGame::Example::Color> *vector_of_enums = nullptr,
2165     MyGame::Example::Race signed_enum = MyGame::Example::Race::None,
2166     const std::vector<uint8_t> *testrequirednestedflatbuffer = nullptr,
2167     std::vector<flatbuffers::Offset<MyGame::Example::Stat>> *scalar_key_sorted_tables = nullptr) {
2168   auto name__ = name ? _fbb.CreateString(name) : 0;
2169   auto inventory__ = inventory ? _fbb.CreateVector<uint8_t>(*inventory) : 0;
2170   auto test4__ = test4 ? _fbb.CreateVectorOfStructs<MyGame::Example::Test>(*test4) : 0;
2171   auto testarrayofstring__ = testarrayofstring ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring) : 0;
2172   auto testarrayoftables__ = testarrayoftables ? _fbb.CreateVectorOfSortedTables<MyGame::Example::Monster>(testarrayoftables) : 0;
2173   auto testnestedflatbuffer__ = testnestedflatbuffer ? _fbb.CreateVector<uint8_t>(*testnestedflatbuffer) : 0;
2174   auto testarrayofbools__ = testarrayofbools ? _fbb.CreateVector<uint8_t>(*testarrayofbools) : 0;
2175   auto testarrayofstring2__ = testarrayofstring2 ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*testarrayofstring2) : 0;
2176   auto testarrayofsortedstruct__ = testarrayofsortedstruct ? _fbb.CreateVectorOfSortedStructs<MyGame::Example::Ability>(testarrayofsortedstruct) : 0;
2177   auto flex__ = flex ? _fbb.CreateVector<uint8_t>(*flex) : 0;
2178   auto test5__ = test5 ? _fbb.CreateVectorOfStructs<MyGame::Example::Test>(*test5) : 0;
2179   auto vector_of_longs__ = vector_of_longs ? _fbb.CreateVector<int64_t>(*vector_of_longs) : 0;
2180   auto vector_of_doubles__ = vector_of_doubles ? _fbb.CreateVector<double>(*vector_of_doubles) : 0;
2181   auto vector_of_referrables__ = vector_of_referrables ? _fbb.CreateVectorOfSortedTables<MyGame::Example::Referrable>(vector_of_referrables) : 0;
2182   auto vector_of_weak_references__ = vector_of_weak_references ? _fbb.CreateVector<uint64_t>(*vector_of_weak_references) : 0;
2183   auto vector_of_strong_referrables__ = vector_of_strong_referrables ? _fbb.CreateVectorOfSortedTables<MyGame::Example::Referrable>(vector_of_strong_referrables) : 0;
2184   auto vector_of_co_owning_references__ = vector_of_co_owning_references ? _fbb.CreateVector<uint64_t>(*vector_of_co_owning_references) : 0;
2185   auto vector_of_non_owning_references__ = vector_of_non_owning_references ? _fbb.CreateVector<uint64_t>(*vector_of_non_owning_references) : 0;
2186   auto vector_of_enums__ = vector_of_enums ? _fbb.CreateVector<MyGame::Example::Color>(*vector_of_enums) : 0;
2187   auto testrequirednestedflatbuffer__ = testrequirednestedflatbuffer ? _fbb.CreateVector<uint8_t>(*testrequirednestedflatbuffer) : 0;
2188   auto scalar_key_sorted_tables__ = scalar_key_sorted_tables ? _fbb.CreateVectorOfSortedTables<MyGame::Example::Stat>(scalar_key_sorted_tables) : 0;
2189   return MyGame::Example::CreateMonster(
2190       _fbb,
2191       pos,
2192       mana,
2193       hp,
2194       name__,
2195       inventory__,
2196       color,
2197       test_type,
2198       test,
2199       test4__,
2200       testarrayofstring__,
2201       testarrayoftables__,
2202       enemy,
2203       testnestedflatbuffer__,
2204       testempty,
2205       testbool,
2206       testhashs32_fnv1,
2207       testhashu32_fnv1,
2208       testhashs64_fnv1,
2209       testhashu64_fnv1,
2210       testhashs32_fnv1a,
2211       testhashu32_fnv1a,
2212       testhashs64_fnv1a,
2213       testhashu64_fnv1a,
2214       testarrayofbools__,
2215       testf,
2216       testf2,
2217       testf3,
2218       testarrayofstring2__,
2219       testarrayofsortedstruct__,
2220       flex__,
2221       test5__,
2222       vector_of_longs__,
2223       vector_of_doubles__,
2224       parent_namespace_test,
2225       vector_of_referrables__,
2226       single_weak_reference,
2227       vector_of_weak_references__,
2228       vector_of_strong_referrables__,
2229       co_owning_reference,
2230       vector_of_co_owning_references__,
2231       non_owning_reference,
2232       vector_of_non_owning_references__,
2233       any_unique_type,
2234       any_unique,
2235       any_ambiguous_type,
2236       any_ambiguous,
2237       vector_of_enums__,
2238       signed_enum,
2239       testrequirednestedflatbuffer__,
2240       scalar_key_sorted_tables__);
2241 }
2242 
2243 flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2244 
2245 struct TypeAliasesT : public flatbuffers::NativeTable {
2246   typedef TypeAliases TableType;
2247   int8_t i8 = 0;
2248   uint8_t u8 = 0;
2249   int16_t i16 = 0;
2250   uint16_t u16 = 0;
2251   int32_t i32 = 0;
2252   uint32_t u32 = 0;
2253   int64_t i64 = 0;
2254   uint64_t u64 = 0;
2255   float f32 = 0.0f;
2256   double f64 = 0.0;
2257   std::vector<int8_t> v8{};
2258   std::vector<double> vf64{};
2259 };
2260 
2261 struct TypeAliases FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
2262   typedef TypeAliasesT NativeTableType;
2263   typedef TypeAliasesBuilder Builder;
2264   struct Traits;
2265   static const flatbuffers::TypeTable *MiniReflectTypeTable() {
2266     return TypeAliasesTypeTable();
2267   }
2268   enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
2269     VT_I8 = 4,
2270     VT_U8 = 6,
2271     VT_I16 = 8,
2272     VT_U16 = 10,
2273     VT_I32 = 12,
2274     VT_U32 = 14,
2275     VT_I64 = 16,
2276     VT_U64 = 18,
2277     VT_F32 = 20,
2278     VT_F64 = 22,
2279     VT_V8 = 24,
2280     VT_VF64 = 26
2281   };
2282   int8_t i8() const {
2283     return GetField<int8_t>(VT_I8, 0);
2284   }
2285   bool mutate_i8(int8_t _i8) {
2286     return SetField<int8_t>(VT_I8, _i8, 0);
2287   }
2288   uint8_t u8() const {
2289     return GetField<uint8_t>(VT_U8, 0);
2290   }
2291   bool mutate_u8(uint8_t _u8) {
2292     return SetField<uint8_t>(VT_U8, _u8, 0);
2293   }
2294   int16_t i16() const {
2295     return GetField<int16_t>(VT_I16, 0);
2296   }
2297   bool mutate_i16(int16_t _i16) {
2298     return SetField<int16_t>(VT_I16, _i16, 0);
2299   }
2300   uint16_t u16() const {
2301     return GetField<uint16_t>(VT_U16, 0);
2302   }
2303   bool mutate_u16(uint16_t _u16) {
2304     return SetField<uint16_t>(VT_U16, _u16, 0);
2305   }
2306   int32_t i32() const {
2307     return GetField<int32_t>(VT_I32, 0);
2308   }
2309   bool mutate_i32(int32_t _i32) {
2310     return SetField<int32_t>(VT_I32, _i32, 0);
2311   }
2312   uint32_t u32() const {
2313     return GetField<uint32_t>(VT_U32, 0);
2314   }
2315   bool mutate_u32(uint32_t _u32) {
2316     return SetField<uint32_t>(VT_U32, _u32, 0);
2317   }
2318   int64_t i64() const {
2319     return GetField<int64_t>(VT_I64, 0);
2320   }
2321   bool mutate_i64(int64_t _i64) {
2322     return SetField<int64_t>(VT_I64, _i64, 0);
2323   }
2324   uint64_t u64() const {
2325     return GetField<uint64_t>(VT_U64, 0);
2326   }
2327   bool mutate_u64(uint64_t _u64) {
2328     return SetField<uint64_t>(VT_U64, _u64, 0);
2329   }
2330   float f32() const {
2331     return GetField<float>(VT_F32, 0.0f);
2332   }
2333   bool mutate_f32(float _f32) {
2334     return SetField<float>(VT_F32, _f32, 0.0f);
2335   }
2336   double f64() const {
2337     return GetField<double>(VT_F64, 0.0);
2338   }
2339   bool mutate_f64(double _f64) {
2340     return SetField<double>(VT_F64, _f64, 0.0);
2341   }
2342   const flatbuffers::Vector<int8_t> *v8() const {
2343     return GetPointer<const flatbuffers::Vector<int8_t> *>(VT_V8);
2344   }
2345   flatbuffers::Vector<int8_t> *mutable_v8() {
2346     return GetPointer<flatbuffers::Vector<int8_t> *>(VT_V8);
2347   }
2348   const flatbuffers::Vector<double> *vf64() const {
2349     return GetPointer<const flatbuffers::Vector<double> *>(VT_VF64);
2350   }
2351   flatbuffers::Vector<double> *mutable_vf64() {
2352     return GetPointer<flatbuffers::Vector<double> *>(VT_VF64);
2353   }
2354   template<size_t Index>
2355   auto get_field() const {
2356          if constexpr (Index == 0) return i8();
2357     else if constexpr (Index == 1) return u8();
2358     else if constexpr (Index == 2) return i16();
2359     else if constexpr (Index == 3) return u16();
2360     else if constexpr (Index == 4) return i32();
2361     else if constexpr (Index == 5) return u32();
2362     else if constexpr (Index == 6) return i64();
2363     else if constexpr (Index == 7) return u64();
2364     else if constexpr (Index == 8) return f32();
2365     else if constexpr (Index == 9) return f64();
2366     else if constexpr (Index == 10) return v8();
2367     else if constexpr (Index == 11) return vf64();
2368     else static_assert(Index != Index, "Invalid Field Index");
2369   }
2370   bool Verify(flatbuffers::Verifier &verifier) const {
2371     return VerifyTableStart(verifier) &&
2372            VerifyField<int8_t>(verifier, VT_I8) &&
2373            VerifyField<uint8_t>(verifier, VT_U8) &&
2374            VerifyField<int16_t>(verifier, VT_I16) &&
2375            VerifyField<uint16_t>(verifier, VT_U16) &&
2376            VerifyField<int32_t>(verifier, VT_I32) &&
2377            VerifyField<uint32_t>(verifier, VT_U32) &&
2378            VerifyField<int64_t>(verifier, VT_I64) &&
2379            VerifyField<uint64_t>(verifier, VT_U64) &&
2380            VerifyField<float>(verifier, VT_F32) &&
2381            VerifyField<double>(verifier, VT_F64) &&
2382            VerifyOffset(verifier, VT_V8) &&
2383            verifier.VerifyVector(v8()) &&
2384            VerifyOffset(verifier, VT_VF64) &&
2385            verifier.VerifyVector(vf64()) &&
2386            verifier.EndTable();
2387   }
2388   TypeAliasesT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2389   void UnPackTo(TypeAliasesT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const;
2390   static flatbuffers::Offset<TypeAliases> Pack(flatbuffers::FlatBufferBuilder &_fbb, const TypeAliasesT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2391 };
2392 
2393 struct TypeAliasesBuilder {
2394   typedef TypeAliases Table;
2395   flatbuffers::FlatBufferBuilder &fbb_;
2396   flatbuffers::uoffset_t start_;
2397   void add_i8(int8_t i8) {
2398     fbb_.AddElement<int8_t>(TypeAliases::VT_I8, i8, 0);
2399   }
2400   void add_u8(uint8_t u8) {
2401     fbb_.AddElement<uint8_t>(TypeAliases::VT_U8, u8, 0);
2402   }
2403   void add_i16(int16_t i16) {
2404     fbb_.AddElement<int16_t>(TypeAliases::VT_I16, i16, 0);
2405   }
2406   void add_u16(uint16_t u16) {
2407     fbb_.AddElement<uint16_t>(TypeAliases::VT_U16, u16, 0);
2408   }
2409   void add_i32(int32_t i32) {
2410     fbb_.AddElement<int32_t>(TypeAliases::VT_I32, i32, 0);
2411   }
2412   void add_u32(uint32_t u32) {
2413     fbb_.AddElement<uint32_t>(TypeAliases::VT_U32, u32, 0);
2414   }
2415   void add_i64(int64_t i64) {
2416     fbb_.AddElement<int64_t>(TypeAliases::VT_I64, i64, 0);
2417   }
2418   void add_u64(uint64_t u64) {
2419     fbb_.AddElement<uint64_t>(TypeAliases::VT_U64, u64, 0);
2420   }
2421   void add_f32(float f32) {
2422     fbb_.AddElement<float>(TypeAliases::VT_F32, f32, 0.0f);
2423   }
2424   void add_f64(double f64) {
2425     fbb_.AddElement<double>(TypeAliases::VT_F64, f64, 0.0);
2426   }
2427   void add_v8(flatbuffers::Offset<flatbuffers::Vector<int8_t>> v8) {
2428     fbb_.AddOffset(TypeAliases::VT_V8, v8);
2429   }
2430   void add_vf64(flatbuffers::Offset<flatbuffers::Vector<double>> vf64) {
2431     fbb_.AddOffset(TypeAliases::VT_VF64, vf64);
2432   }
2433   explicit TypeAliasesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
2434         : fbb_(_fbb) {
2435     start_ = fbb_.StartTable();
2436   }
2437   flatbuffers::Offset<TypeAliases> Finish() {
2438     const auto end = fbb_.EndTable(start_);
2439     auto o = flatbuffers::Offset<TypeAliases>(end);
2440     return o;
2441   }
2442 };
2443 
2444 inline flatbuffers::Offset<TypeAliases> CreateTypeAliases(
2445     flatbuffers::FlatBufferBuilder &_fbb,
2446     int8_t i8 = 0,
2447     uint8_t u8 = 0,
2448     int16_t i16 = 0,
2449     uint16_t u16 = 0,
2450     int32_t i32 = 0,
2451     uint32_t u32 = 0,
2452     int64_t i64 = 0,
2453     uint64_t u64 = 0,
2454     float f32 = 0.0f,
2455     double f64 = 0.0,
2456     flatbuffers::Offset<flatbuffers::Vector<int8_t>> v8 = 0,
2457     flatbuffers::Offset<flatbuffers::Vector<double>> vf64 = 0) {
2458   TypeAliasesBuilder builder_(_fbb);
2459   builder_.add_f64(f64);
2460   builder_.add_u64(u64);
2461   builder_.add_i64(i64);
2462   builder_.add_vf64(vf64);
2463   builder_.add_v8(v8);
2464   builder_.add_f32(f32);
2465   builder_.add_u32(u32);
2466   builder_.add_i32(i32);
2467   builder_.add_u16(u16);
2468   builder_.add_i16(i16);
2469   builder_.add_u8(u8);
2470   builder_.add_i8(i8);
2471   return builder_.Finish();
2472 }
2473 
2474 struct TypeAliases::Traits {
2475   using type = TypeAliases;
2476   static auto constexpr Create = CreateTypeAliases;
2477   static constexpr auto name = "TypeAliases";
2478   static constexpr auto fully_qualified_name = "MyGame.Example.TypeAliases";
2479   static constexpr std::array<const char *, 12> field_names = {
2480     "i8",
2481     "u8",
2482     "i16",
2483     "u16",
2484     "i32",
2485     "u32",
2486     "i64",
2487     "u64",
2488     "f32",
2489     "f64",
2490     "v8",
2491     "vf64"
2492   };
2493   template<size_t Index>
2494   using FieldType = decltype(std::declval<type>().get_field<Index>());
2495   static constexpr size_t fields_number = 12;
2496 };
2497 
2498 inline flatbuffers::Offset<TypeAliases> CreateTypeAliasesDirect(
2499     flatbuffers::FlatBufferBuilder &_fbb,
2500     int8_t i8 = 0,
2501     uint8_t u8 = 0,
2502     int16_t i16 = 0,
2503     uint16_t u16 = 0,
2504     int32_t i32 = 0,
2505     uint32_t u32 = 0,
2506     int64_t i64 = 0,
2507     uint64_t u64 = 0,
2508     float f32 = 0.0f,
2509     double f64 = 0.0,
2510     const std::vector<int8_t> *v8 = nullptr,
2511     const std::vector<double> *vf64 = nullptr) {
2512   auto v8__ = v8 ? _fbb.CreateVector<int8_t>(*v8) : 0;
2513   auto vf64__ = vf64 ? _fbb.CreateVector<double>(*vf64) : 0;
2514   return MyGame::Example::CreateTypeAliases(
2515       _fbb,
2516       i8,
2517       u8,
2518       i16,
2519       u16,
2520       i32,
2521       u32,
2522       i64,
2523       u64,
2524       f32,
2525       f64,
2526       v8__,
2527       vf64__);
2528 }
2529 
2530 flatbuffers::Offset<TypeAliases> CreateTypeAliases(flatbuffers::FlatBufferBuilder &_fbb, const TypeAliasesT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
2531 
2532 }  // namespace Example
2533 
2534 inline InParentNamespaceT *InParentNamespace::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2535   auto _o = std::make_unique<InParentNamespaceT>();
2536   UnPackTo(_o.get(), _resolver);
2537   return _o.release();
2538 }
2539 
2540 inline void InParentNamespace::UnPackTo(InParentNamespaceT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2541   (void)_o;
2542   (void)_resolver;
2543 }
2544 
2545 inline flatbuffers::Offset<InParentNamespace> InParentNamespace::Pack(flatbuffers::FlatBufferBuilder &_fbb, const InParentNamespaceT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2546   return CreateInParentNamespace(_fbb, _o, _rehasher);
2547 }
2548 
2549 inline flatbuffers::Offset<InParentNamespace> CreateInParentNamespace(flatbuffers::FlatBufferBuilder &_fbb, const InParentNamespaceT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2550   (void)_rehasher;
2551   (void)_o;
2552   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const InParentNamespaceT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2553   return MyGame::CreateInParentNamespace(
2554       _fbb);
2555 }
2556 
2557 namespace Example2 {
2558 
2559 inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2560   auto _o = std::make_unique<MonsterT>();
2561   UnPackTo(_o.get(), _resolver);
2562   return _o.release();
2563 }
2564 
2565 inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2566   (void)_o;
2567   (void)_resolver;
2568 }
2569 
2570 inline flatbuffers::Offset<Monster> Monster::Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2571   return CreateMonster(_fbb, _o, _rehasher);
2572 }
2573 
2574 inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2575   (void)_rehasher;
2576   (void)_o;
2577   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const MonsterT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2578   return MyGame::Example2::CreateMonster(
2579       _fbb);
2580 }
2581 
2582 }  // namespace Example2
2583 
2584 namespace Example {
2585 
2586 inline TestSimpleTableWithEnumT *TestSimpleTableWithEnum::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2587   auto _o = std::make_unique<TestSimpleTableWithEnumT>();
2588   UnPackTo(_o.get(), _resolver);
2589   return _o.release();
2590 }
2591 
2592 inline void TestSimpleTableWithEnum::UnPackTo(TestSimpleTableWithEnumT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2593   (void)_o;
2594   (void)_resolver;
2595   { auto _e = color(); _o->color = _e; }
2596 }
2597 
2598 inline flatbuffers::Offset<TestSimpleTableWithEnum> TestSimpleTableWithEnum::Pack(flatbuffers::FlatBufferBuilder &_fbb, const TestSimpleTableWithEnumT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2599   return CreateTestSimpleTableWithEnum(_fbb, _o, _rehasher);
2600 }
2601 
2602 inline flatbuffers::Offset<TestSimpleTableWithEnum> CreateTestSimpleTableWithEnum(flatbuffers::FlatBufferBuilder &_fbb, const TestSimpleTableWithEnumT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2603   (void)_rehasher;
2604   (void)_o;
2605   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const TestSimpleTableWithEnumT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2606   auto _color = _o->color;
2607   return MyGame::Example::CreateTestSimpleTableWithEnum(
2608       _fbb,
2609       _color);
2610 }
2611 
2612 inline StatT *Stat::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2613   auto _o = std::make_unique<StatT>();
2614   UnPackTo(_o.get(), _resolver);
2615   return _o.release();
2616 }
2617 
2618 inline void Stat::UnPackTo(StatT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2619   (void)_o;
2620   (void)_resolver;
2621   { auto _e = id(); if (_e) _o->id = _e->str(); }
2622   { auto _e = val(); _o->val = _e; }
2623   { auto _e = count(); _o->count = _e; }
2624 }
2625 
2626 inline flatbuffers::Offset<Stat> Stat::Pack(flatbuffers::FlatBufferBuilder &_fbb, const StatT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2627   return CreateStat(_fbb, _o, _rehasher);
2628 }
2629 
2630 inline flatbuffers::Offset<Stat> CreateStat(flatbuffers::FlatBufferBuilder &_fbb, const StatT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2631   (void)_rehasher;
2632   (void)_o;
2633   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const StatT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2634   auto _id = _o->id.empty() ? 0 : _fbb.CreateString(_o->id);
2635   auto _val = _o->val;
2636   auto _count = _o->count;
2637   return MyGame::Example::CreateStat(
2638       _fbb,
2639       _id,
2640       _val,
2641       _count);
2642 }
2643 
2644 inline ReferrableT *Referrable::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2645   auto _o = std::make_unique<ReferrableT>();
2646   UnPackTo(_o.get(), _resolver);
2647   return _o.release();
2648 }
2649 
2650 inline void Referrable::UnPackTo(ReferrableT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2651   (void)_o;
2652   (void)_resolver;
2653   { auto _e = id(); _o->id = _e; }
2654 }
2655 
2656 inline flatbuffers::Offset<Referrable> Referrable::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ReferrableT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2657   return CreateReferrable(_fbb, _o, _rehasher);
2658 }
2659 
2660 inline flatbuffers::Offset<Referrable> CreateReferrable(flatbuffers::FlatBufferBuilder &_fbb, const ReferrableT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2661   (void)_rehasher;
2662   (void)_o;
2663   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const ReferrableT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2664   auto _id = _o->id;
2665   return MyGame::Example::CreateReferrable(
2666       _fbb,
2667       _id);
2668 }
2669 
2670 inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2671   auto _o = std::make_unique<MonsterT>();
2672   UnPackTo(_o.get(), _resolver);
2673   return _o.release();
2674 }
2675 
2676 inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2677   (void)_o;
2678   (void)_resolver;
2679   { auto _e = pos(); if (_e) _o->pos = std::unique_ptr<MyGame::Example::Vec3>(new MyGame::Example::Vec3(*_e)); }
2680   { auto _e = mana(); _o->mana = _e; }
2681   { auto _e = hp(); _o->hp = _e; }
2682   { auto _e = name(); if (_e) _o->name = _e->str(); }
2683   { auto _e = inventory(); if (_e) { _o->inventory.resize(_e->size()); std::copy(_e->begin(), _e->end(), _o->inventory.begin()); } }
2684   { auto _e = color(); _o->color = _e; }
2685   { auto _e = test_type(); _o->test.type = _e; }
2686   { auto _e = test(); if (_e) _o->test.value = MyGame::Example::AnyUnion::UnPack(_e, test_type(), _resolver); }
2687   { auto _e = test4(); if (_e) { _o->test4.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->test4[_i] = *_e->Get(_i); } } }
2688   { auto _e = testarrayofstring(); if (_e) { _o->testarrayofstring.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->testarrayofstring[_i] = _e->Get(_i)->str(); } } }
2689   { auto _e = testarrayoftables(); if (_e) { _o->testarrayoftables.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->testarrayoftables[_i] = std::unique_ptr<MyGame::Example::MonsterT>(_e->Get(_i)->UnPack(_resolver)); } } }
2690   { auto _e = enemy(); if (_e) _o->enemy = std::unique_ptr<MyGame::Example::MonsterT>(_e->UnPack(_resolver)); }
2691   { auto _e = testnestedflatbuffer(); if (_e) { _o->testnestedflatbuffer.resize(_e->size()); std::copy(_e->begin(), _e->end(), _o->testnestedflatbuffer.begin()); } }
2692   { auto _e = testempty(); if (_e) _o->testempty = std::unique_ptr<MyGame::Example::StatT>(_e->UnPack(_resolver)); }
2693   { auto _e = testbool(); _o->testbool = _e; }
2694   { auto _e = testhashs32_fnv1(); _o->testhashs32_fnv1 = _e; }
2695   { auto _e = testhashu32_fnv1(); _o->testhashu32_fnv1 = _e; }
2696   { auto _e = testhashs64_fnv1(); _o->testhashs64_fnv1 = _e; }
2697   { auto _e = testhashu64_fnv1(); _o->testhashu64_fnv1 = _e; }
2698   { auto _e = testhashs32_fnv1a(); _o->testhashs32_fnv1a = _e; }
2699   { auto _e = testhashu32_fnv1a(); //scalar resolver, naked
2700 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->testhashu32_fnv1a), static_cast<flatbuffers::hash_value_t>(_e)); else _o->testhashu32_fnv1a = nullptr; }
2701   { auto _e = testhashs64_fnv1a(); _o->testhashs64_fnv1a = _e; }
2702   { auto _e = testhashu64_fnv1a(); _o->testhashu64_fnv1a = _e; }
2703   { auto _e = testarrayofbools(); if (_e) { _o->testarrayofbools.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->testarrayofbools[_i] = _e->Get(_i) != 0; } } }
2704   { auto _e = testf(); _o->testf = _e; }
2705   { auto _e = testf2(); _o->testf2 = _e; }
2706   { auto _e = testf3(); _o->testf3 = _e; }
2707   { auto _e = testarrayofstring2(); if (_e) { _o->testarrayofstring2.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->testarrayofstring2[_i] = _e->Get(_i)->str(); } } }
2708   { auto _e = testarrayofsortedstruct(); if (_e) { _o->testarrayofsortedstruct.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->testarrayofsortedstruct[_i] = *_e->Get(_i); } } }
2709   { auto _e = flex(); if (_e) { _o->flex.resize(_e->size()); std::copy(_e->begin(), _e->end(), _o->flex.begin()); } }
2710   { auto _e = test5(); if (_e) { _o->test5.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->test5[_i] = *_e->Get(_i); } } }
2711   { auto _e = vector_of_longs(); if (_e) { _o->vector_of_longs.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_longs[_i] = _e->Get(_i); } } }
2712   { auto _e = vector_of_doubles(); if (_e) { _o->vector_of_doubles.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_doubles[_i] = _e->Get(_i); } } }
2713   { auto _e = parent_namespace_test(); if (_e) _o->parent_namespace_test = std::unique_ptr<MyGame::InParentNamespaceT>(_e->UnPack(_resolver)); }
2714   { auto _e = vector_of_referrables(); if (_e) { _o->vector_of_referrables.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_referrables[_i] = std::unique_ptr<MyGame::Example::ReferrableT>(_e->Get(_i)->UnPack(_resolver)); } } }
2715   { auto _e = single_weak_reference(); //scalar resolver, naked
2716 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->single_weak_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->single_weak_reference = nullptr; }
2717   { auto _e = vector_of_weak_references(); if (_e) { _o->vector_of_weak_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, naked
2718 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_weak_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i))); else _o->vector_of_weak_references[_i] = nullptr; } } }
2719   { auto _e = vector_of_strong_referrables(); if (_e) { _o->vector_of_strong_referrables.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_strong_referrables[_i] = std::unique_ptr<MyGame::Example::ReferrableT>(_e->Get(_i)->UnPack(_resolver)); } } }
2720   { auto _e = co_owning_reference(); //scalar resolver, naked
2721 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->co_owning_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->co_owning_reference = nullptr; }
2722   { auto _e = vector_of_co_owning_references(); if (_e) { _o->vector_of_co_owning_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, default_ptr_type
2723 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_co_owning_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i)));/* else do nothing */; } } }
2724   { auto _e = non_owning_reference(); //scalar resolver, naked
2725 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->non_owning_reference), static_cast<flatbuffers::hash_value_t>(_e)); else _o->non_owning_reference = nullptr; }
2726   { auto _e = vector_of_non_owning_references(); if (_e) { _o->vector_of_non_owning_references.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { //vector resolver, naked
2727 if (_resolver) (*_resolver)(reinterpret_cast<void **>(&_o->vector_of_non_owning_references[_i]), static_cast<flatbuffers::hash_value_t>(_e->Get(_i))); else _o->vector_of_non_owning_references[_i] = nullptr; } } }
2728   { auto _e = any_unique_type(); _o->any_unique.type = _e; }
2729   { auto _e = any_unique(); if (_e) _o->any_unique.value = MyGame::Example::AnyUniqueAliasesUnion::UnPack(_e, any_unique_type(), _resolver); }
2730   { auto _e = any_ambiguous_type(); _o->any_ambiguous.type = _e; }
2731   { auto _e = any_ambiguous(); if (_e) _o->any_ambiguous.value = MyGame::Example::AnyAmbiguousAliasesUnion::UnPack(_e, any_ambiguous_type(), _resolver); }
2732   { auto _e = vector_of_enums(); if (_e) { _o->vector_of_enums.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vector_of_enums[_i] = static_cast<MyGame::Example::Color>(_e->Get(_i)); } } }
2733   { auto _e = signed_enum(); _o->signed_enum = _e; }
2734   { auto _e = testrequirednestedflatbuffer(); if (_e) { _o->testrequirednestedflatbuffer.resize(_e->size()); std::copy(_e->begin(), _e->end(), _o->testrequirednestedflatbuffer.begin()); } }
2735   { auto _e = scalar_key_sorted_tables(); if (_e) { _o->scalar_key_sorted_tables.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->scalar_key_sorted_tables[_i] = std::unique_ptr<MyGame::Example::StatT>(_e->Get(_i)->UnPack(_resolver)); } } }
2736 }
2737 
2738 inline flatbuffers::Offset<Monster> Monster::Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2739   return CreateMonster(_fbb, _o, _rehasher);
2740 }
2741 
2742 inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2743   (void)_rehasher;
2744   (void)_o;
2745   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const MonsterT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2746   auto _pos = _o->pos ? _o->pos.get() : 0;
2747   auto _mana = _o->mana;
2748   auto _hp = _o->hp;
2749   auto _name = _fbb.CreateString(_o->name);
2750   auto _inventory = _o->inventory.size() ? _fbb.CreateVector(_o->inventory) : 0;
2751   auto _color = _o->color;
2752   auto _test_type = _o->test.type;
2753   auto _test = _o->test.Pack(_fbb);
2754   auto _test4 = _o->test4.size() ? _fbb.CreateVectorOfStructs(_o->test4) : 0;
2755   auto _testarrayofstring = _o->testarrayofstring.size() ? _fbb.CreateVectorOfStrings(_o->testarrayofstring) : 0;
2756   auto _testarrayoftables = _o->testarrayoftables.size() ? _fbb.CreateVector<flatbuffers::Offset<MyGame::Example::Monster>> (_o->testarrayoftables.size(), [](size_t i, _VectorArgs *__va) { return CreateMonster(*__va->__fbb, __va->__o->testarrayoftables[i].get(), __va->__rehasher); }, &_va ) : 0;
2757   auto _enemy = _o->enemy ? CreateMonster(_fbb, _o->enemy.get(), _rehasher) : 0;
2758   auto _testnestedflatbuffer = _o->testnestedflatbuffer.size() ? _fbb.CreateVector(_o->testnestedflatbuffer) : 0;
2759   auto _testempty = _o->testempty ? CreateStat(_fbb, _o->testempty.get(), _rehasher) : 0;
2760   auto _testbool = _o->testbool;
2761   auto _testhashs32_fnv1 = _o->testhashs32_fnv1;
2762   auto _testhashu32_fnv1 = _o->testhashu32_fnv1;
2763   auto _testhashs64_fnv1 = _o->testhashs64_fnv1;
2764   auto _testhashu64_fnv1 = _o->testhashu64_fnv1;
2765   auto _testhashs32_fnv1a = _o->testhashs32_fnv1a;
2766   auto _testhashu32_fnv1a = _rehasher ? static_cast<uint32_t>((*_rehasher)(_o->testhashu32_fnv1a)) : 0;
2767   auto _testhashs64_fnv1a = _o->testhashs64_fnv1a;
2768   auto _testhashu64_fnv1a = _o->testhashu64_fnv1a;
2769   auto _testarrayofbools = _o->testarrayofbools.size() ? _fbb.CreateVector(_o->testarrayofbools) : 0;
2770   auto _testf = _o->testf;
2771   auto _testf2 = _o->testf2;
2772   auto _testf3 = _o->testf3;
2773   auto _testarrayofstring2 = _o->testarrayofstring2.size() ? _fbb.CreateVectorOfStrings(_o->testarrayofstring2) : 0;
2774   auto _testarrayofsortedstruct = _o->testarrayofsortedstruct.size() ? _fbb.CreateVectorOfStructs(_o->testarrayofsortedstruct) : 0;
2775   auto _flex = _o->flex.size() ? _fbb.CreateVector(_o->flex) : 0;
2776   auto _test5 = _o->test5.size() ? _fbb.CreateVectorOfStructs(_o->test5) : 0;
2777   auto _vector_of_longs = _o->vector_of_longs.size() ? _fbb.CreateVector(_o->vector_of_longs) : 0;
2778   auto _vector_of_doubles = _o->vector_of_doubles.size() ? _fbb.CreateVector(_o->vector_of_doubles) : 0;
2779   auto _parent_namespace_test = _o->parent_namespace_test ? CreateInParentNamespace(_fbb, _o->parent_namespace_test.get(), _rehasher) : 0;
2780   auto _vector_of_referrables = _o->vector_of_referrables.size() ? _fbb.CreateVector<flatbuffers::Offset<MyGame::Example::Referrable>> (_o->vector_of_referrables.size(), [](size_t i, _VectorArgs *__va) { return CreateReferrable(*__va->__fbb, __va->__o->vector_of_referrables[i].get(), __va->__rehasher); }, &_va ) : 0;
2781   auto _single_weak_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->single_weak_reference)) : 0;
2782   auto _vector_of_weak_references = _o->vector_of_weak_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_weak_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_weak_references[i])) : 0; }, &_va ) : 0;
2783   auto _vector_of_strong_referrables = _o->vector_of_strong_referrables.size() ? _fbb.CreateVector<flatbuffers::Offset<MyGame::Example::Referrable>> (_o->vector_of_strong_referrables.size(), [](size_t i, _VectorArgs *__va) { return CreateReferrable(*__va->__fbb, __va->__o->vector_of_strong_referrables[i].get(), __va->__rehasher); }, &_va ) : 0;
2784   auto _co_owning_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->co_owning_reference)) : 0;
2785   auto _vector_of_co_owning_references = _o->vector_of_co_owning_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_co_owning_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_co_owning_references[i].get())) : 0; }, &_va ) : 0;
2786   auto _non_owning_reference = _rehasher ? static_cast<uint64_t>((*_rehasher)(_o->non_owning_reference)) : 0;
2787   auto _vector_of_non_owning_references = _o->vector_of_non_owning_references.size() ? _fbb.CreateVector<uint64_t>(_o->vector_of_non_owning_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast<uint64_t>((*__va->__rehasher)(__va->__o->vector_of_non_owning_references[i])) : 0; }, &_va ) : 0;
2788   auto _any_unique_type = _o->any_unique.type;
2789   auto _any_unique = _o->any_unique.Pack(_fbb);
2790   auto _any_ambiguous_type = _o->any_ambiguous.type;
2791   auto _any_ambiguous = _o->any_ambiguous.Pack(_fbb);
2792   auto _vector_of_enums = _o->vector_of_enums.size() ? _fbb.CreateVector(_o->vector_of_enums) : 0;
2793   auto _signed_enum = _o->signed_enum;
2794   auto _testrequirednestedflatbuffer = _o->testrequirednestedflatbuffer.size() ? _fbb.CreateVector(_o->testrequirednestedflatbuffer) : 0;
2795   auto _scalar_key_sorted_tables = _o->scalar_key_sorted_tables.size() ? _fbb.CreateVector<flatbuffers::Offset<MyGame::Example::Stat>> (_o->scalar_key_sorted_tables.size(), [](size_t i, _VectorArgs *__va) { return CreateStat(*__va->__fbb, __va->__o->scalar_key_sorted_tables[i].get(), __va->__rehasher); }, &_va ) : 0;
2796   return MyGame::Example::CreateMonster(
2797       _fbb,
2798       _pos,
2799       _mana,
2800       _hp,
2801       _name,
2802       _inventory,
2803       _color,
2804       _test_type,
2805       _test,
2806       _test4,
2807       _testarrayofstring,
2808       _testarrayoftables,
2809       _enemy,
2810       _testnestedflatbuffer,
2811       _testempty,
2812       _testbool,
2813       _testhashs32_fnv1,
2814       _testhashu32_fnv1,
2815       _testhashs64_fnv1,
2816       _testhashu64_fnv1,
2817       _testhashs32_fnv1a,
2818       _testhashu32_fnv1a,
2819       _testhashs64_fnv1a,
2820       _testhashu64_fnv1a,
2821       _testarrayofbools,
2822       _testf,
2823       _testf2,
2824       _testf3,
2825       _testarrayofstring2,
2826       _testarrayofsortedstruct,
2827       _flex,
2828       _test5,
2829       _vector_of_longs,
2830       _vector_of_doubles,
2831       _parent_namespace_test,
2832       _vector_of_referrables,
2833       _single_weak_reference,
2834       _vector_of_weak_references,
2835       _vector_of_strong_referrables,
2836       _co_owning_reference,
2837       _vector_of_co_owning_references,
2838       _non_owning_reference,
2839       _vector_of_non_owning_references,
2840       _any_unique_type,
2841       _any_unique,
2842       _any_ambiguous_type,
2843       _any_ambiguous,
2844       _vector_of_enums,
2845       _signed_enum,
2846       _testrequirednestedflatbuffer,
2847       _scalar_key_sorted_tables);
2848 }
2849 
2850 inline TypeAliasesT *TypeAliases::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
2851   auto _o = std::make_unique<TypeAliasesT>();
2852   UnPackTo(_o.get(), _resolver);
2853   return _o.release();
2854 }
2855 
2856 inline void TypeAliases::UnPackTo(TypeAliasesT *_o, const flatbuffers::resolver_function_t *_resolver) const {
2857   (void)_o;
2858   (void)_resolver;
2859   { auto _e = i8(); _o->i8 = _e; }
2860   { auto _e = u8(); _o->u8 = _e; }
2861   { auto _e = i16(); _o->i16 = _e; }
2862   { auto _e = u16(); _o->u16 = _e; }
2863   { auto _e = i32(); _o->i32 = _e; }
2864   { auto _e = u32(); _o->u32 = _e; }
2865   { auto _e = i64(); _o->i64 = _e; }
2866   { auto _e = u64(); _o->u64 = _e; }
2867   { auto _e = f32(); _o->f32 = _e; }
2868   { auto _e = f64(); _o->f64 = _e; }
2869   { auto _e = v8(); if (_e) { _o->v8.resize(_e->size()); std::copy(_e->begin(), _e->end(), _o->v8.begin()); } }
2870   { auto _e = vf64(); if (_e) { _o->vf64.resize(_e->size()); for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->vf64[_i] = _e->Get(_i); } } }
2871 }
2872 
2873 inline flatbuffers::Offset<TypeAliases> TypeAliases::Pack(flatbuffers::FlatBufferBuilder &_fbb, const TypeAliasesT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
2874   return CreateTypeAliases(_fbb, _o, _rehasher);
2875 }
2876 
2877 inline flatbuffers::Offset<TypeAliases> CreateTypeAliases(flatbuffers::FlatBufferBuilder &_fbb, const TypeAliasesT *_o, const flatbuffers::rehasher_function_t *_rehasher) {
2878   (void)_rehasher;
2879   (void)_o;
2880   struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const TypeAliasesT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
2881   auto _i8 = _o->i8;
2882   auto _u8 = _o->u8;
2883   auto _i16 = _o->i16;
2884   auto _u16 = _o->u16;
2885   auto _i32 = _o->i32;
2886   auto _u32 = _o->u32;
2887   auto _i64 = _o->i64;
2888   auto _u64 = _o->u64;
2889   auto _f32 = _o->f32;
2890   auto _f64 = _o->f64;
2891   auto _v8 = _o->v8.size() ? _fbb.CreateVector(_o->v8) : 0;
2892   auto _vf64 = _o->vf64.size() ? _fbb.CreateVector(_o->vf64) : 0;
2893   return MyGame::Example::CreateTypeAliases(
2894       _fbb,
2895       _i8,
2896       _u8,
2897       _i16,
2898       _u16,
2899       _i32,
2900       _u32,
2901       _i64,
2902       _u64,
2903       _f32,
2904       _f64,
2905       _v8,
2906       _vf64);
2907 }
2908 
2909 inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *obj, Any type) {
2910   switch (type) {
2911     case Any::NONE: {
2912       return true;
2913     }
2914     case Any::Monster: {
2915       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
2916       return verifier.VerifyTable(ptr);
2917     }
2918     case Any::TestSimpleTableWithEnum: {
2919       auto ptr = reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnum *>(obj);
2920       return verifier.VerifyTable(ptr);
2921     }
2922     case Any::MyGame_Example2_Monster: {
2923       auto ptr = reinterpret_cast<const MyGame::Example2::Monster *>(obj);
2924       return verifier.VerifyTable(ptr);
2925     }
2926     default: return true;
2927   }
2928 }
2929 
2930 inline bool VerifyAnyVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
2931   if (!values || !types) return !values && !types;
2932   if (values->size() != types->size()) return false;
2933   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
2934     if (!VerifyAny(
2935         verifier,  values->Get(i), types->GetEnum<Any>(i))) {
2936       return false;
2937     }
2938   }
2939   return true;
2940 }
2941 
2942 inline void *AnyUnion::UnPack(const void *obj, Any type, const flatbuffers::resolver_function_t *resolver) {
2943   switch (type) {
2944     case Any::Monster: {
2945       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
2946       return ptr->UnPack(resolver);
2947     }
2948     case Any::TestSimpleTableWithEnum: {
2949       auto ptr = reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnum *>(obj);
2950       return ptr->UnPack(resolver);
2951     }
2952     case Any::MyGame_Example2_Monster: {
2953       auto ptr = reinterpret_cast<const MyGame::Example2::Monster *>(obj);
2954       return ptr->UnPack(resolver);
2955     }
2956     default: return nullptr;
2957   }
2958 }
2959 
2960 inline flatbuffers::Offset<void> AnyUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
2961   switch (type) {
2962     case Any::Monster: {
2963       auto ptr = reinterpret_cast<const MyGame::Example::MonsterT *>(value);
2964       return CreateMonster(_fbb, ptr, _rehasher).Union();
2965     }
2966     case Any::TestSimpleTableWithEnum: {
2967       auto ptr = reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnumT *>(value);
2968       return CreateTestSimpleTableWithEnum(_fbb, ptr, _rehasher).Union();
2969     }
2970     case Any::MyGame_Example2_Monster: {
2971       auto ptr = reinterpret_cast<const MyGame::Example2::MonsterT *>(value);
2972       return CreateMonster(_fbb, ptr, _rehasher).Union();
2973     }
2974     default: return 0;
2975   }
2976 }
2977 
2978 inline AnyUnion::AnyUnion(const AnyUnion &u) : type(u.type), value(nullptr) {
2979   switch (type) {
2980     case Any::Monster: {
2981       FLATBUFFERS_ASSERT(false);  // MyGame::Example::MonsterT not copyable.
2982       break;
2983     }
2984     case Any::TestSimpleTableWithEnum: {
2985       value = new MyGame::Example::TestSimpleTableWithEnumT(*reinterpret_cast<MyGame::Example::TestSimpleTableWithEnumT *>(u.value));
2986       break;
2987     }
2988     case Any::MyGame_Example2_Monster: {
2989       value = new MyGame::Example2::MonsterT(*reinterpret_cast<MyGame::Example2::MonsterT *>(u.value));
2990       break;
2991     }
2992     default:
2993       break;
2994   }
2995 }
2996 
2997 inline void AnyUnion::Reset() {
2998   switch (type) {
2999     case Any::Monster: {
3000       auto ptr = reinterpret_cast<MyGame::Example::MonsterT *>(value);
3001       delete ptr;
3002       break;
3003     }
3004     case Any::TestSimpleTableWithEnum: {
3005       auto ptr = reinterpret_cast<MyGame::Example::TestSimpleTableWithEnumT *>(value);
3006       delete ptr;
3007       break;
3008     }
3009     case Any::MyGame_Example2_Monster: {
3010       auto ptr = reinterpret_cast<MyGame::Example2::MonsterT *>(value);
3011       delete ptr;
3012       break;
3013     }
3014     default: break;
3015   }
3016   value = nullptr;
3017   type = Any::NONE;
3018 }
3019 
3020 inline bool VerifyAnyUniqueAliases(flatbuffers::Verifier &verifier, const void *obj, AnyUniqueAliases type) {
3021   switch (type) {
3022     case AnyUniqueAliases::NONE: {
3023       return true;
3024     }
3025     case AnyUniqueAliases::M: {
3026       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3027       return verifier.VerifyTable(ptr);
3028     }
3029     case AnyUniqueAliases::TS: {
3030       auto ptr = reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnum *>(obj);
3031       return verifier.VerifyTable(ptr);
3032     }
3033     case AnyUniqueAliases::M2: {
3034       auto ptr = reinterpret_cast<const MyGame::Example2::Monster *>(obj);
3035       return verifier.VerifyTable(ptr);
3036     }
3037     default: return true;
3038   }
3039 }
3040 
3041 inline bool VerifyAnyUniqueAliasesVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
3042   if (!values || !types) return !values && !types;
3043   if (values->size() != types->size()) return false;
3044   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
3045     if (!VerifyAnyUniqueAliases(
3046         verifier,  values->Get(i), types->GetEnum<AnyUniqueAliases>(i))) {
3047       return false;
3048     }
3049   }
3050   return true;
3051 }
3052 
3053 inline void *AnyUniqueAliasesUnion::UnPack(const void *obj, AnyUniqueAliases type, const flatbuffers::resolver_function_t *resolver) {
3054   switch (type) {
3055     case AnyUniqueAliases::M: {
3056       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3057       return ptr->UnPack(resolver);
3058     }
3059     case AnyUniqueAliases::TS: {
3060       auto ptr = reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnum *>(obj);
3061       return ptr->UnPack(resolver);
3062     }
3063     case AnyUniqueAliases::M2: {
3064       auto ptr = reinterpret_cast<const MyGame::Example2::Monster *>(obj);
3065       return ptr->UnPack(resolver);
3066     }
3067     default: return nullptr;
3068   }
3069 }
3070 
3071 inline flatbuffers::Offset<void> AnyUniqueAliasesUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
3072   switch (type) {
3073     case AnyUniqueAliases::M: {
3074       auto ptr = reinterpret_cast<const MyGame::Example::MonsterT *>(value);
3075       return CreateMonster(_fbb, ptr, _rehasher).Union();
3076     }
3077     case AnyUniqueAliases::TS: {
3078       auto ptr = reinterpret_cast<const MyGame::Example::TestSimpleTableWithEnumT *>(value);
3079       return CreateTestSimpleTableWithEnum(_fbb, ptr, _rehasher).Union();
3080     }
3081     case AnyUniqueAliases::M2: {
3082       auto ptr = reinterpret_cast<const MyGame::Example2::MonsterT *>(value);
3083       return CreateMonster(_fbb, ptr, _rehasher).Union();
3084     }
3085     default: return 0;
3086   }
3087 }
3088 
3089 inline AnyUniqueAliasesUnion::AnyUniqueAliasesUnion(const AnyUniqueAliasesUnion &u) : type(u.type), value(nullptr) {
3090   switch (type) {
3091     case AnyUniqueAliases::M: {
3092       FLATBUFFERS_ASSERT(false);  // MyGame::Example::MonsterT not copyable.
3093       break;
3094     }
3095     case AnyUniqueAliases::TS: {
3096       value = new MyGame::Example::TestSimpleTableWithEnumT(*reinterpret_cast<MyGame::Example::TestSimpleTableWithEnumT *>(u.value));
3097       break;
3098     }
3099     case AnyUniqueAliases::M2: {
3100       value = new MyGame::Example2::MonsterT(*reinterpret_cast<MyGame::Example2::MonsterT *>(u.value));
3101       break;
3102     }
3103     default:
3104       break;
3105   }
3106 }
3107 
3108 inline void AnyUniqueAliasesUnion::Reset() {
3109   switch (type) {
3110     case AnyUniqueAliases::M: {
3111       auto ptr = reinterpret_cast<MyGame::Example::MonsterT *>(value);
3112       delete ptr;
3113       break;
3114     }
3115     case AnyUniqueAliases::TS: {
3116       auto ptr = reinterpret_cast<MyGame::Example::TestSimpleTableWithEnumT *>(value);
3117       delete ptr;
3118       break;
3119     }
3120     case AnyUniqueAliases::M2: {
3121       auto ptr = reinterpret_cast<MyGame::Example2::MonsterT *>(value);
3122       delete ptr;
3123       break;
3124     }
3125     default: break;
3126   }
3127   value = nullptr;
3128   type = AnyUniqueAliases::NONE;
3129 }
3130 
3131 inline bool VerifyAnyAmbiguousAliases(flatbuffers::Verifier &verifier, const void *obj, AnyAmbiguousAliases type) {
3132   switch (type) {
3133     case AnyAmbiguousAliases::NONE: {
3134       return true;
3135     }
3136     case AnyAmbiguousAliases::M1: {
3137       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3138       return verifier.VerifyTable(ptr);
3139     }
3140     case AnyAmbiguousAliases::M2: {
3141       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3142       return verifier.VerifyTable(ptr);
3143     }
3144     case AnyAmbiguousAliases::M3: {
3145       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3146       return verifier.VerifyTable(ptr);
3147     }
3148     default: return true;
3149   }
3150 }
3151 
3152 inline bool VerifyAnyAmbiguousAliasesVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
3153   if (!values || !types) return !values && !types;
3154   if (values->size() != types->size()) return false;
3155   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
3156     if (!VerifyAnyAmbiguousAliases(
3157         verifier,  values->Get(i), types->GetEnum<AnyAmbiguousAliases>(i))) {
3158       return false;
3159     }
3160   }
3161   return true;
3162 }
3163 
3164 inline void *AnyAmbiguousAliasesUnion::UnPack(const void *obj, AnyAmbiguousAliases type, const flatbuffers::resolver_function_t *resolver) {
3165   switch (type) {
3166     case AnyAmbiguousAliases::M1: {
3167       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3168       return ptr->UnPack(resolver);
3169     }
3170     case AnyAmbiguousAliases::M2: {
3171       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3172       return ptr->UnPack(resolver);
3173     }
3174     case AnyAmbiguousAliases::M3: {
3175       auto ptr = reinterpret_cast<const MyGame::Example::Monster *>(obj);
3176       return ptr->UnPack(resolver);
3177     }
3178     default: return nullptr;
3179   }
3180 }
3181 
3182 inline flatbuffers::Offset<void> AnyAmbiguousAliasesUnion::Pack(flatbuffers::FlatBufferBuilder &_fbb, const flatbuffers::rehasher_function_t *_rehasher) const {
3183   switch (type) {
3184     case AnyAmbiguousAliases::M1: {
3185       auto ptr = reinterpret_cast<const MyGame::Example::MonsterT *>(value);
3186       return CreateMonster(_fbb, ptr, _rehasher).Union();
3187     }
3188     case AnyAmbiguousAliases::M2: {
3189       auto ptr = reinterpret_cast<const MyGame::Example::MonsterT *>(value);
3190       return CreateMonster(_fbb, ptr, _rehasher).Union();
3191     }
3192     case AnyAmbiguousAliases::M3: {
3193       auto ptr = reinterpret_cast<const MyGame::Example::MonsterT *>(value);
3194       return CreateMonster(_fbb, ptr, _rehasher).Union();
3195     }
3196     default: return 0;
3197   }
3198 }
3199 
3200 inline AnyAmbiguousAliasesUnion::AnyAmbiguousAliasesUnion(const AnyAmbiguousAliasesUnion &u) : type(u.type), value(nullptr) {
3201   switch (type) {
3202     case AnyAmbiguousAliases::M1: {
3203       FLATBUFFERS_ASSERT(false);  // MyGame::Example::MonsterT not copyable.
3204       break;
3205     }
3206     case AnyAmbiguousAliases::M2: {
3207       FLATBUFFERS_ASSERT(false);  // MyGame::Example::MonsterT not copyable.
3208       break;
3209     }
3210     case AnyAmbiguousAliases::M3: {
3211       FLATBUFFERS_ASSERT(false);  // MyGame::Example::MonsterT not copyable.
3212       break;
3213     }
3214     default:
3215       break;
3216   }
3217 }
3218 
3219 inline void AnyAmbiguousAliasesUnion::Reset() {
3220   switch (type) {
3221     case AnyAmbiguousAliases::M1: {
3222       auto ptr = reinterpret_cast<MyGame::Example::MonsterT *>(value);
3223       delete ptr;
3224       break;
3225     }
3226     case AnyAmbiguousAliases::M2: {
3227       auto ptr = reinterpret_cast<MyGame::Example::MonsterT *>(value);
3228       delete ptr;
3229       break;
3230     }
3231     case AnyAmbiguousAliases::M3: {
3232       auto ptr = reinterpret_cast<MyGame::Example::MonsterT *>(value);
3233       delete ptr;
3234       break;
3235     }
3236     default: break;
3237   }
3238   value = nullptr;
3239   type = AnyAmbiguousAliases::NONE;
3240 }
3241 
3242 inline const flatbuffers::TypeTable *ColorTypeTable() {
3243   static const flatbuffers::TypeCode type_codes[] = {
3244     { flatbuffers::ET_UCHAR, 0, 0 },
3245     { flatbuffers::ET_UCHAR, 0, 0 },
3246     { flatbuffers::ET_UCHAR, 0, 0 }
3247   };
3248   static const flatbuffers::TypeFunction type_refs[] = {
3249     MyGame::Example::ColorTypeTable
3250   };
3251   static const int64_t values[] = { 1, 2, 8 };
3252   static const char * const names[] = {
3253     "Red",
3254     "Green",
3255     "Blue"
3256   };
3257   static const flatbuffers::TypeTable tt = {
3258     flatbuffers::ST_ENUM, 3, type_codes, type_refs, nullptr, values, names
3259   };
3260   return &tt;
3261 }
3262 
3263 inline const flatbuffers::TypeTable *RaceTypeTable() {
3264   static const flatbuffers::TypeCode type_codes[] = {
3265     { flatbuffers::ET_CHAR, 0, 0 },
3266     { flatbuffers::ET_CHAR, 0, 0 },
3267     { flatbuffers::ET_CHAR, 0, 0 },
3268     { flatbuffers::ET_CHAR, 0, 0 }
3269   };
3270   static const flatbuffers::TypeFunction type_refs[] = {
3271     MyGame::Example::RaceTypeTable
3272   };
3273   static const int64_t values[] = { -1, 0, 1, 2 };
3274   static const char * const names[] = {
3275     "None",
3276     "Human",
3277     "Dwarf",
3278     "Elf"
3279   };
3280   static const flatbuffers::TypeTable tt = {
3281     flatbuffers::ST_ENUM, 4, type_codes, type_refs, nullptr, values, names
3282   };
3283   return &tt;
3284 }
3285 
3286 inline const flatbuffers::TypeTable *AnyTypeTable() {
3287   static const flatbuffers::TypeCode type_codes[] = {
3288     { flatbuffers::ET_SEQUENCE, 0, -1 },
3289     { flatbuffers::ET_SEQUENCE, 0, 0 },
3290     { flatbuffers::ET_SEQUENCE, 0, 1 },
3291     { flatbuffers::ET_SEQUENCE, 0, 2 }
3292   };
3293   static const flatbuffers::TypeFunction type_refs[] = {
3294     MyGame::Example::MonsterTypeTable,
3295     MyGame::Example::TestSimpleTableWithEnumTypeTable,
3296     MyGame::Example2::MonsterTypeTable
3297   };
3298   static const char * const names[] = {
3299     "NONE",
3300     "Monster",
3301     "TestSimpleTableWithEnum",
3302     "MyGame_Example2_Monster"
3303   };
3304   static const flatbuffers::TypeTable tt = {
3305     flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
3306   };
3307   return &tt;
3308 }
3309 
3310 inline const flatbuffers::TypeTable *AnyUniqueAliasesTypeTable() {
3311   static const flatbuffers::TypeCode type_codes[] = {
3312     { flatbuffers::ET_SEQUENCE, 0, -1 },
3313     { flatbuffers::ET_SEQUENCE, 0, 0 },
3314     { flatbuffers::ET_SEQUENCE, 0, 1 },
3315     { flatbuffers::ET_SEQUENCE, 0, 2 }
3316   };
3317   static const flatbuffers::TypeFunction type_refs[] = {
3318     MyGame::Example::MonsterTypeTable,
3319     MyGame::Example::TestSimpleTableWithEnumTypeTable,
3320     MyGame::Example2::MonsterTypeTable
3321   };
3322   static const char * const names[] = {
3323     "NONE",
3324     "M",
3325     "TS",
3326     "M2"
3327   };
3328   static const flatbuffers::TypeTable tt = {
3329     flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
3330   };
3331   return &tt;
3332 }
3333 
3334 inline const flatbuffers::TypeTable *AnyAmbiguousAliasesTypeTable() {
3335   static const flatbuffers::TypeCode type_codes[] = {
3336     { flatbuffers::ET_SEQUENCE, 0, -1 },
3337     { flatbuffers::ET_SEQUENCE, 0, 0 },
3338     { flatbuffers::ET_SEQUENCE, 0, 0 },
3339     { flatbuffers::ET_SEQUENCE, 0, 0 }
3340   };
3341   static const flatbuffers::TypeFunction type_refs[] = {
3342     MyGame::Example::MonsterTypeTable
3343   };
3344   static const char * const names[] = {
3345     "NONE",
3346     "M1",
3347     "M2",
3348     "M3"
3349   };
3350   static const flatbuffers::TypeTable tt = {
3351     flatbuffers::ST_UNION, 4, type_codes, type_refs, nullptr, nullptr, names
3352   };
3353   return &tt;
3354 }
3355 
3356 }  // namespace Example
3357 
3358 inline const flatbuffers::TypeTable *InParentNamespaceTypeTable() {
3359   static const flatbuffers::TypeTable tt = {
3360     flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
3361   };
3362   return &tt;
3363 }
3364 
3365 namespace Example2 {
3366 
3367 inline const flatbuffers::TypeTable *MonsterTypeTable() {
3368   static const flatbuffers::TypeTable tt = {
3369     flatbuffers::ST_TABLE, 0, nullptr, nullptr, nullptr, nullptr, nullptr
3370   };
3371   return &tt;
3372 }
3373 
3374 }  // namespace Example2
3375 
3376 namespace Example {
3377 
3378 inline const flatbuffers::TypeTable *TestTypeTable() {
3379   static const flatbuffers::TypeCode type_codes[] = {
3380     { flatbuffers::ET_SHORT, 0, -1 },
3381     { flatbuffers::ET_CHAR, 0, -1 }
3382   };
3383   static const int64_t values[] = { 0, 2, 4 };
3384   static const char * const names[] = {
3385     "a",
3386     "b"
3387   };
3388   static const flatbuffers::TypeTable tt = {
3389     flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
3390   };
3391   return &tt;
3392 }
3393 
3394 inline const flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable() {
3395   static const flatbuffers::TypeCode type_codes[] = {
3396     { flatbuffers::ET_UCHAR, 0, 0 }
3397   };
3398   static const flatbuffers::TypeFunction type_refs[] = {
3399     MyGame::Example::ColorTypeTable
3400   };
3401   static const char * const names[] = {
3402     "color"
3403   };
3404   static const flatbuffers::TypeTable tt = {
3405     flatbuffers::ST_TABLE, 1, type_codes, type_refs, nullptr, nullptr, names
3406   };
3407   return &tt;
3408 }
3409 
3410 inline const flatbuffers::TypeTable *Vec3TypeTable() {
3411   static const flatbuffers::TypeCode type_codes[] = {
3412     { flatbuffers::ET_FLOAT, 0, -1 },
3413     { flatbuffers::ET_FLOAT, 0, -1 },
3414     { flatbuffers::ET_FLOAT, 0, -1 },
3415     { flatbuffers::ET_DOUBLE, 0, -1 },
3416     { flatbuffers::ET_UCHAR, 0, 0 },
3417     { flatbuffers::ET_SEQUENCE, 0, 1 }
3418   };
3419   static const flatbuffers::TypeFunction type_refs[] = {
3420     MyGame::Example::ColorTypeTable,
3421     MyGame::Example::TestTypeTable
3422   };
3423   static const int64_t values[] = { 0, 4, 8, 16, 24, 26, 32 };
3424   static const char * const names[] = {
3425     "x",
3426     "y",
3427     "z",
3428     "test1",
3429     "test2",
3430     "test3"
3431   };
3432   static const flatbuffers::TypeTable tt = {
3433     flatbuffers::ST_STRUCT, 6, type_codes, type_refs, nullptr, values, names
3434   };
3435   return &tt;
3436 }
3437 
3438 inline const flatbuffers::TypeTable *AbilityTypeTable() {
3439   static const flatbuffers::TypeCode type_codes[] = {
3440     { flatbuffers::ET_UINT, 0, -1 },
3441     { flatbuffers::ET_UINT, 0, -1 }
3442   };
3443   static const int64_t values[] = { 0, 4, 8 };
3444   static const char * const names[] = {
3445     "id",
3446     "distance"
3447   };
3448   static const flatbuffers::TypeTable tt = {
3449     flatbuffers::ST_STRUCT, 2, type_codes, nullptr, nullptr, values, names
3450   };
3451   return &tt;
3452 }
3453 
3454 inline const flatbuffers::TypeTable *StructOfStructsTypeTable() {
3455   static const flatbuffers::TypeCode type_codes[] = {
3456     { flatbuffers::ET_SEQUENCE, 0, 0 },
3457     { flatbuffers::ET_SEQUENCE, 0, 1 },
3458     { flatbuffers::ET_SEQUENCE, 0, 0 }
3459   };
3460   static const flatbuffers::TypeFunction type_refs[] = {
3461     MyGame::Example::AbilityTypeTable,
3462     MyGame::Example::TestTypeTable
3463   };
3464   static const int64_t values[] = { 0, 8, 12, 20 };
3465   static const char * const names[] = {
3466     "a",
3467     "b",
3468     "c"
3469   };
3470   static const flatbuffers::TypeTable tt = {
3471     flatbuffers::ST_STRUCT, 3, type_codes, type_refs, nullptr, values, names
3472   };
3473   return &tt;
3474 }
3475 
3476 inline const flatbuffers::TypeTable *StatTypeTable() {
3477   static const flatbuffers::TypeCode type_codes[] = {
3478     { flatbuffers::ET_STRING, 0, -1 },
3479     { flatbuffers::ET_LONG, 0, -1 },
3480     { flatbuffers::ET_USHORT, 0, -1 }
3481   };
3482   static const char * const names[] = {
3483     "id",
3484     "val",
3485     "count"
3486   };
3487   static const flatbuffers::TypeTable tt = {
3488     flatbuffers::ST_TABLE, 3, type_codes, nullptr, nullptr, nullptr, names
3489   };
3490   return &tt;
3491 }
3492 
3493 inline const flatbuffers::TypeTable *ReferrableTypeTable() {
3494   static const flatbuffers::TypeCode type_codes[] = {
3495     { flatbuffers::ET_ULONG, 0, -1 }
3496   };
3497   static const char * const names[] = {
3498     "id"
3499   };
3500   static const flatbuffers::TypeTable tt = {
3501     flatbuffers::ST_TABLE, 1, type_codes, nullptr, nullptr, nullptr, names
3502   };
3503   return &tt;
3504 }
3505 
3506 inline const flatbuffers::TypeTable *MonsterTypeTable() {
3507   static const flatbuffers::TypeCode type_codes[] = {
3508     { flatbuffers::ET_SEQUENCE, 0, 0 },
3509     { flatbuffers::ET_SHORT, 0, -1 },
3510     { flatbuffers::ET_SHORT, 0, -1 },
3511     { flatbuffers::ET_STRING, 0, -1 },
3512     { flatbuffers::ET_BOOL, 0, -1 },
3513     { flatbuffers::ET_UCHAR, 1, -1 },
3514     { flatbuffers::ET_UCHAR, 0, 1 },
3515     { flatbuffers::ET_UTYPE, 0, 2 },
3516     { flatbuffers::ET_SEQUENCE, 0, 2 },
3517     { flatbuffers::ET_SEQUENCE, 1, 3 },
3518     { flatbuffers::ET_STRING, 1, -1 },
3519     { flatbuffers::ET_SEQUENCE, 1, 4 },
3520     { flatbuffers::ET_SEQUENCE, 0, 4 },
3521     { flatbuffers::ET_UCHAR, 1, -1 },
3522     { flatbuffers::ET_SEQUENCE, 0, 5 },
3523     { flatbuffers::ET_BOOL, 0, -1 },
3524     { flatbuffers::ET_INT, 0, -1 },
3525     { flatbuffers::ET_UINT, 0, -1 },
3526     { flatbuffers::ET_LONG, 0, -1 },
3527     { flatbuffers::ET_ULONG, 0, -1 },
3528     { flatbuffers::ET_INT, 0, -1 },
3529     { flatbuffers::ET_UINT, 0, -1 },
3530     { flatbuffers::ET_LONG, 0, -1 },
3531     { flatbuffers::ET_ULONG, 0, -1 },
3532     { flatbuffers::ET_BOOL, 1, -1 },
3533     { flatbuffers::ET_FLOAT, 0, -1 },
3534     { flatbuffers::ET_FLOAT, 0, -1 },
3535     { flatbuffers::ET_FLOAT, 0, -1 },
3536     { flatbuffers::ET_STRING, 1, -1 },
3537     { flatbuffers::ET_SEQUENCE, 1, 6 },
3538     { flatbuffers::ET_UCHAR, 1, -1 },
3539     { flatbuffers::ET_SEQUENCE, 1, 3 },
3540     { flatbuffers::ET_LONG, 1, -1 },
3541     { flatbuffers::ET_DOUBLE, 1, -1 },
3542     { flatbuffers::ET_SEQUENCE, 0, 7 },
3543     { flatbuffers::ET_SEQUENCE, 1, 8 },
3544     { flatbuffers::ET_ULONG, 0, -1 },
3545     { flatbuffers::ET_ULONG, 1, -1 },
3546     { flatbuffers::ET_SEQUENCE, 1, 8 },
3547     { flatbuffers::ET_ULONG, 0, -1 },
3548     { flatbuffers::ET_ULONG, 1, -1 },
3549     { flatbuffers::ET_ULONG, 0, -1 },
3550     { flatbuffers::ET_ULONG, 1, -1 },
3551     { flatbuffers::ET_UTYPE, 0, 9 },
3552     { flatbuffers::ET_SEQUENCE, 0, 9 },
3553     { flatbuffers::ET_UTYPE, 0, 10 },
3554     { flatbuffers::ET_SEQUENCE, 0, 10 },
3555     { flatbuffers::ET_UCHAR, 1, 1 },
3556     { flatbuffers::ET_CHAR, 0, 11 },
3557     { flatbuffers::ET_UCHAR, 1, -1 },
3558     { flatbuffers::ET_SEQUENCE, 1, 5 }
3559   };
3560   static const flatbuffers::TypeFunction type_refs[] = {
3561     MyGame::Example::Vec3TypeTable,
3562     MyGame::Example::ColorTypeTable,
3563     MyGame::Example::AnyTypeTable,
3564     MyGame::Example::TestTypeTable,
3565     MyGame::Example::MonsterTypeTable,
3566     MyGame::Example::StatTypeTable,
3567     MyGame::Example::AbilityTypeTable,
3568     MyGame::InParentNamespaceTypeTable,
3569     MyGame::Example::ReferrableTypeTable,
3570     MyGame::Example::AnyUniqueAliasesTypeTable,
3571     MyGame::Example::AnyAmbiguousAliasesTypeTable,
3572     MyGame::Example::RaceTypeTable
3573   };
3574   static const char * const names[] = {
3575     "pos",
3576     "mana",
3577     "hp",
3578     "name",
3579     "friendly",
3580     "inventory",
3581     "color",
3582     "test_type",
3583     "test",
3584     "test4",
3585     "testarrayofstring",
3586     "testarrayoftables",
3587     "enemy",
3588     "testnestedflatbuffer",
3589     "testempty",
3590     "testbool",
3591     "testhashs32_fnv1",
3592     "testhashu32_fnv1",
3593     "testhashs64_fnv1",
3594     "testhashu64_fnv1",
3595     "testhashs32_fnv1a",
3596     "testhashu32_fnv1a",
3597     "testhashs64_fnv1a",
3598     "testhashu64_fnv1a",
3599     "testarrayofbools",
3600     "testf",
3601     "testf2",
3602     "testf3",
3603     "testarrayofstring2",
3604     "testarrayofsortedstruct",
3605     "flex",
3606     "test5",
3607     "vector_of_longs",
3608     "vector_of_doubles",
3609     "parent_namespace_test",
3610     "vector_of_referrables",
3611     "single_weak_reference",
3612     "vector_of_weak_references",
3613     "vector_of_strong_referrables",
3614     "co_owning_reference",
3615     "vector_of_co_owning_references",
3616     "non_owning_reference",
3617     "vector_of_non_owning_references",
3618     "any_unique_type",
3619     "any_unique",
3620     "any_ambiguous_type",
3621     "any_ambiguous",
3622     "vector_of_enums",
3623     "signed_enum",
3624     "testrequirednestedflatbuffer",
3625     "scalar_key_sorted_tables"
3626   };
3627   static const flatbuffers::TypeTable tt = {
3628     flatbuffers::ST_TABLE, 51, type_codes, type_refs, nullptr, nullptr, names
3629   };
3630   return &tt;
3631 }
3632 
3633 inline const flatbuffers::TypeTable *TypeAliasesTypeTable() {
3634   static const flatbuffers::TypeCode type_codes[] = {
3635     { flatbuffers::ET_CHAR, 0, -1 },
3636     { flatbuffers::ET_UCHAR, 0, -1 },
3637     { flatbuffers::ET_SHORT, 0, -1 },
3638     { flatbuffers::ET_USHORT, 0, -1 },
3639     { flatbuffers::ET_INT, 0, -1 },
3640     { flatbuffers::ET_UINT, 0, -1 },
3641     { flatbuffers::ET_LONG, 0, -1 },
3642     { flatbuffers::ET_ULONG, 0, -1 },
3643     { flatbuffers::ET_FLOAT, 0, -1 },
3644     { flatbuffers::ET_DOUBLE, 0, -1 },
3645     { flatbuffers::ET_CHAR, 1, -1 },
3646     { flatbuffers::ET_DOUBLE, 1, -1 }
3647   };
3648   static const char * const names[] = {
3649     "i8",
3650     "u8",
3651     "i16",
3652     "u16",
3653     "i32",
3654     "u32",
3655     "i64",
3656     "u64",
3657     "f32",
3658     "f64",
3659     "v8",
3660     "vf64"
3661   };
3662   static const flatbuffers::TypeTable tt = {
3663     flatbuffers::ST_TABLE, 12, type_codes, nullptr, nullptr, nullptr, names
3664   };
3665   return &tt;
3666 }
3667 
3668 inline const MyGame::Example::Monster *GetMonster(const void *buf) {
3669   return flatbuffers::GetRoot<MyGame::Example::Monster>(buf);
3670 }
3671 
3672 inline const MyGame::Example::Monster *GetSizePrefixedMonster(const void *buf) {
3673   return flatbuffers::GetSizePrefixedRoot<MyGame::Example::Monster>(buf);
3674 }
3675 
3676 inline Monster *GetMutableMonster(void *buf) {
3677   return flatbuffers::GetMutableRoot<Monster>(buf);
3678 }
3679 
3680 inline const char *MonsterIdentifier() {
3681   return "MONS";
3682 }
3683 
3684 inline bool MonsterBufferHasIdentifier(const void *buf) {
3685   return flatbuffers::BufferHasIdentifier(
3686       buf, MonsterIdentifier());
3687 }
3688 
3689 inline bool VerifyMonsterBuffer(
3690     flatbuffers::Verifier &verifier) {
3691   return verifier.VerifyBuffer<MyGame::Example::Monster>(MonsterIdentifier());
3692 }
3693 
3694 inline bool VerifySizePrefixedMonsterBuffer(
3695     flatbuffers::Verifier &verifier) {
3696   return verifier.VerifySizePrefixedBuffer<MyGame::Example::Monster>(MonsterIdentifier());
3697 }
3698 
3699 inline const char *MonsterExtension() {
3700   return "mon";
3701 }
3702 
3703 inline void FinishMonsterBuffer(
3704     flatbuffers::FlatBufferBuilder &fbb,
3705     flatbuffers::Offset<MyGame::Example::Monster> root) {
3706   fbb.Finish(root, MonsterIdentifier());
3707 }
3708 
3709 inline void FinishSizePrefixedMonsterBuffer(
3710     flatbuffers::FlatBufferBuilder &fbb,
3711     flatbuffers::Offset<MyGame::Example::Monster> root) {
3712   fbb.FinishSizePrefixed(root, MonsterIdentifier());
3713 }
3714 
3715 inline std::unique_ptr<MyGame::Example::MonsterT> UnPackMonster(
3716     const void *buf,
3717     const flatbuffers::resolver_function_t *res = nullptr) {
3718   return std::unique_ptr<MyGame::Example::MonsterT>(GetMonster(buf)->UnPack(res));
3719 }
3720 
3721 inline std::unique_ptr<MyGame::Example::MonsterT> UnPackSizePrefixedMonster(
3722     const void *buf,
3723     const flatbuffers::resolver_function_t *res = nullptr) {
3724   return std::unique_ptr<MyGame::Example::MonsterT>(GetSizePrefixedMonster(buf)->UnPack(res));
3725 }
3726 
3727 }  // namespace Example
3728 }  // namespace MyGame
3729 
3730 #endif  // FLATBUFFERS_GENERATED_MONSTERTEST_MYGAME_EXAMPLE_H_
3731