Home | History | Annotate | Download | only in flatbuffers
      1 // automatically generated by the FlatBuffers compiler, do not modify
      2 
      3 
      4 #ifndef FLATBUFFERS_GENERATED_REFLECTION_REFLECTION_H_
      5 #define FLATBUFFERS_GENERATED_REFLECTION_REFLECTION_H_
      6 
      7 #include "flatbuffers/flatbuffers.h"
      8 
      9 namespace reflection {
     10 
     11 struct Type;
     12 
     13 struct KeyValue;
     14 
     15 struct EnumVal;
     16 
     17 struct Enum;
     18 
     19 struct Field;
     20 
     21 struct Object;
     22 
     23 struct Schema;
     24 
     25 enum BaseType {
     26   None = 0,
     27   UType = 1,
     28   Bool = 2,
     29   Byte = 3,
     30   UByte = 4,
     31   Short = 5,
     32   UShort = 6,
     33   Int = 7,
     34   UInt = 8,
     35   Long = 9,
     36   ULong = 10,
     37   Float = 11,
     38   Double = 12,
     39   String = 13,
     40   Vector = 14,
     41   Obj = 15,
     42   Union = 16
     43 };
     44 
     45 inline const char **EnumNamesBaseType() {
     46   static const char *names[] = {
     47     "None",
     48     "UType",
     49     "Bool",
     50     "Byte",
     51     "UByte",
     52     "Short",
     53     "UShort",
     54     "Int",
     55     "UInt",
     56     "Long",
     57     "ULong",
     58     "Float",
     59     "Double",
     60     "String",
     61     "Vector",
     62     "Obj",
     63     "Union",
     64     nullptr
     65   };
     66   return names;
     67 }
     68 
     69 inline const char *EnumNameBaseType(BaseType e) {
     70   const size_t index = static_cast<int>(e);
     71   return EnumNamesBaseType()[index];
     72 }
     73 
     74 struct Type FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
     75   enum {
     76     VT_BASE_TYPE = 4,
     77     VT_ELEMENT = 6,
     78     VT_INDEX = 8
     79   };
     80   BaseType base_type() const {
     81     return static_cast<BaseType>(GetField<int8_t>(VT_BASE_TYPE, 0));
     82   }
     83   BaseType element() const {
     84     return static_cast<BaseType>(GetField<int8_t>(VT_ELEMENT, 0));
     85   }
     86   int32_t index() const {
     87     return GetField<int32_t>(VT_INDEX, -1);
     88   }
     89   bool Verify(flatbuffers::Verifier &verifier) const {
     90     return VerifyTableStart(verifier) &&
     91            VerifyField<int8_t>(verifier, VT_BASE_TYPE) &&
     92            VerifyField<int8_t>(verifier, VT_ELEMENT) &&
     93            VerifyField<int32_t>(verifier, VT_INDEX) &&
     94            verifier.EndTable();
     95   }
     96 };
     97 
     98 struct TypeBuilder {
     99   flatbuffers::FlatBufferBuilder &fbb_;
    100   flatbuffers::uoffset_t start_;
    101   void add_base_type(BaseType base_type) {
    102     fbb_.AddElement<int8_t>(Type::VT_BASE_TYPE, static_cast<int8_t>(base_type), 0);
    103   }
    104   void add_element(BaseType element) {
    105     fbb_.AddElement<int8_t>(Type::VT_ELEMENT, static_cast<int8_t>(element), 0);
    106   }
    107   void add_index(int32_t index) {
    108     fbb_.AddElement<int32_t>(Type::VT_INDEX, index, -1);
    109   }
    110   TypeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    111         : fbb_(_fbb) {
    112     start_ = fbb_.StartTable();
    113   }
    114   TypeBuilder &operator=(const TypeBuilder &);
    115   flatbuffers::Offset<Type> Finish() {
    116     const auto end = fbb_.EndTable(start_, 3);
    117     auto o = flatbuffers::Offset<Type>(end);
    118     return o;
    119   }
    120 };
    121 
    122 inline flatbuffers::Offset<Type> CreateType(
    123     flatbuffers::FlatBufferBuilder &_fbb,
    124     BaseType base_type = None,
    125     BaseType element = None,
    126     int32_t index = -1) {
    127   TypeBuilder builder_(_fbb);
    128   builder_.add_index(index);
    129   builder_.add_element(element);
    130   builder_.add_base_type(base_type);
    131   return builder_.Finish();
    132 }
    133 
    134 struct KeyValue FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    135   enum {
    136     VT_KEY = 4,
    137     VT_VALUE = 6
    138   };
    139   const flatbuffers::String *key() const {
    140     return GetPointer<const flatbuffers::String *>(VT_KEY);
    141   }
    142   bool KeyCompareLessThan(const KeyValue *o) const {
    143     return *key() < *o->key();
    144   }
    145   int KeyCompareWithValue(const char *val) const {
    146     return strcmp(key()->c_str(), val);
    147   }
    148   const flatbuffers::String *value() const {
    149     return GetPointer<const flatbuffers::String *>(VT_VALUE);
    150   }
    151   bool Verify(flatbuffers::Verifier &verifier) const {
    152     return VerifyTableStart(verifier) &&
    153            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_KEY) &&
    154            verifier.Verify(key()) &&
    155            VerifyField<flatbuffers::uoffset_t>(verifier, VT_VALUE) &&
    156            verifier.Verify(value()) &&
    157            verifier.EndTable();
    158   }
    159 };
    160 
    161 struct KeyValueBuilder {
    162   flatbuffers::FlatBufferBuilder &fbb_;
    163   flatbuffers::uoffset_t start_;
    164   void add_key(flatbuffers::Offset<flatbuffers::String> key) {
    165     fbb_.AddOffset(KeyValue::VT_KEY, key);
    166   }
    167   void add_value(flatbuffers::Offset<flatbuffers::String> value) {
    168     fbb_.AddOffset(KeyValue::VT_VALUE, value);
    169   }
    170   KeyValueBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    171         : fbb_(_fbb) {
    172     start_ = fbb_.StartTable();
    173   }
    174   KeyValueBuilder &operator=(const KeyValueBuilder &);
    175   flatbuffers::Offset<KeyValue> Finish() {
    176     const auto end = fbb_.EndTable(start_, 2);
    177     auto o = flatbuffers::Offset<KeyValue>(end);
    178     fbb_.Required(o, KeyValue::VT_KEY);
    179     return o;
    180   }
    181 };
    182 
    183 inline flatbuffers::Offset<KeyValue> CreateKeyValue(
    184     flatbuffers::FlatBufferBuilder &_fbb,
    185     flatbuffers::Offset<flatbuffers::String> key = 0,
    186     flatbuffers::Offset<flatbuffers::String> value = 0) {
    187   KeyValueBuilder builder_(_fbb);
    188   builder_.add_value(value);
    189   builder_.add_key(key);
    190   return builder_.Finish();
    191 }
    192 
    193 inline flatbuffers::Offset<KeyValue> CreateKeyValueDirect(
    194     flatbuffers::FlatBufferBuilder &_fbb,
    195     const char *key = nullptr,
    196     const char *value = nullptr) {
    197   return reflection::CreateKeyValue(
    198       _fbb,
    199       key ? _fbb.CreateString(key) : 0,
    200       value ? _fbb.CreateString(value) : 0);
    201 }
    202 
    203 struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    204   enum {
    205     VT_NAME = 4,
    206     VT_VALUE = 6,
    207     VT_OBJECT = 8
    208   };
    209   const flatbuffers::String *name() const {
    210     return GetPointer<const flatbuffers::String *>(VT_NAME);
    211   }
    212   int64_t value() const {
    213     return GetField<int64_t>(VT_VALUE, 0);
    214   }
    215   bool KeyCompareLessThan(const EnumVal *o) const {
    216     return value() < o->value();
    217   }
    218   int KeyCompareWithValue(int64_t val) const {
    219     const auto key = value();
    220     if (key < val) {
    221       return -1;
    222     } else if (key > val) {
    223       return 1;
    224     } else {
    225       return 0;
    226     }
    227   }
    228   const Object *object() const {
    229     return GetPointer<const Object *>(VT_OBJECT);
    230   }
    231   bool Verify(flatbuffers::Verifier &verifier) const {
    232     return VerifyTableStart(verifier) &&
    233            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
    234            verifier.Verify(name()) &&
    235            VerifyField<int64_t>(verifier, VT_VALUE) &&
    236            VerifyField<flatbuffers::uoffset_t>(verifier, VT_OBJECT) &&
    237            verifier.VerifyTable(object()) &&
    238            verifier.EndTable();
    239   }
    240 };
    241 
    242 struct EnumValBuilder {
    243   flatbuffers::FlatBufferBuilder &fbb_;
    244   flatbuffers::uoffset_t start_;
    245   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
    246     fbb_.AddOffset(EnumVal::VT_NAME, name);
    247   }
    248   void add_value(int64_t value) {
    249     fbb_.AddElement<int64_t>(EnumVal::VT_VALUE, value, 0);
    250   }
    251   void add_object(flatbuffers::Offset<Object> object) {
    252     fbb_.AddOffset(EnumVal::VT_OBJECT, object);
    253   }
    254   EnumValBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    255         : fbb_(_fbb) {
    256     start_ = fbb_.StartTable();
    257   }
    258   EnumValBuilder &operator=(const EnumValBuilder &);
    259   flatbuffers::Offset<EnumVal> Finish() {
    260     const auto end = fbb_.EndTable(start_, 3);
    261     auto o = flatbuffers::Offset<EnumVal>(end);
    262     fbb_.Required(o, EnumVal::VT_NAME);
    263     return o;
    264   }
    265 };
    266 
    267 inline flatbuffers::Offset<EnumVal> CreateEnumVal(
    268     flatbuffers::FlatBufferBuilder &_fbb,
    269     flatbuffers::Offset<flatbuffers::String> name = 0,
    270     int64_t value = 0,
    271     flatbuffers::Offset<Object> object = 0) {
    272   EnumValBuilder builder_(_fbb);
    273   builder_.add_value(value);
    274   builder_.add_object(object);
    275   builder_.add_name(name);
    276   return builder_.Finish();
    277 }
    278 
    279 inline flatbuffers::Offset<EnumVal> CreateEnumValDirect(
    280     flatbuffers::FlatBufferBuilder &_fbb,
    281     const char *name = nullptr,
    282     int64_t value = 0,
    283     flatbuffers::Offset<Object> object = 0) {
    284   return reflection::CreateEnumVal(
    285       _fbb,
    286       name ? _fbb.CreateString(name) : 0,
    287       value,
    288       object);
    289 }
    290 
    291 struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    292   enum {
    293     VT_NAME = 4,
    294     VT_VALUES = 6,
    295     VT_IS_UNION = 8,
    296     VT_UNDERLYING_TYPE = 10,
    297     VT_ATTRIBUTES = 12,
    298     VT_DOCUMENTATION = 14
    299   };
    300   const flatbuffers::String *name() const {
    301     return GetPointer<const flatbuffers::String *>(VT_NAME);
    302   }
    303   bool KeyCompareLessThan(const Enum *o) const {
    304     return *name() < *o->name();
    305   }
    306   int KeyCompareWithValue(const char *val) const {
    307     return strcmp(name()->c_str(), val);
    308   }
    309   const flatbuffers::Vector<flatbuffers::Offset<EnumVal>> *values() const {
    310     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<EnumVal>> *>(VT_VALUES);
    311   }
    312   bool is_union() const {
    313     return GetField<uint8_t>(VT_IS_UNION, 0) != 0;
    314   }
    315   const Type *underlying_type() const {
    316     return GetPointer<const Type *>(VT_UNDERLYING_TYPE);
    317   }
    318   const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *attributes() const {
    319     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *>(VT_ATTRIBUTES);
    320   }
    321   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
    322     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
    323   }
    324   bool Verify(flatbuffers::Verifier &verifier) const {
    325     return VerifyTableStart(verifier) &&
    326            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
    327            verifier.Verify(name()) &&
    328            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_VALUES) &&
    329            verifier.Verify(values()) &&
    330            verifier.VerifyVectorOfTables(values()) &&
    331            VerifyField<uint8_t>(verifier, VT_IS_UNION) &&
    332            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_UNDERLYING_TYPE) &&
    333            verifier.VerifyTable(underlying_type()) &&
    334            VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) &&
    335            verifier.Verify(attributes()) &&
    336            verifier.VerifyVectorOfTables(attributes()) &&
    337            VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) &&
    338            verifier.Verify(documentation()) &&
    339            verifier.VerifyVectorOfStrings(documentation()) &&
    340            verifier.EndTable();
    341   }
    342 };
    343 
    344 struct EnumBuilder {
    345   flatbuffers::FlatBufferBuilder &fbb_;
    346   flatbuffers::uoffset_t start_;
    347   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
    348     fbb_.AddOffset(Enum::VT_NAME, name);
    349   }
    350   void add_values(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<EnumVal>>> values) {
    351     fbb_.AddOffset(Enum::VT_VALUES, values);
    352   }
    353   void add_is_union(bool is_union) {
    354     fbb_.AddElement<uint8_t>(Enum::VT_IS_UNION, static_cast<uint8_t>(is_union), 0);
    355   }
    356   void add_underlying_type(flatbuffers::Offset<Type> underlying_type) {
    357     fbb_.AddOffset(Enum::VT_UNDERLYING_TYPE, underlying_type);
    358   }
    359   void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes) {
    360     fbb_.AddOffset(Enum::VT_ATTRIBUTES, attributes);
    361   }
    362   void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
    363     fbb_.AddOffset(Enum::VT_DOCUMENTATION, documentation);
    364   }
    365   EnumBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    366         : fbb_(_fbb) {
    367     start_ = fbb_.StartTable();
    368   }
    369   EnumBuilder &operator=(const EnumBuilder &);
    370   flatbuffers::Offset<Enum> Finish() {
    371     const auto end = fbb_.EndTable(start_, 6);
    372     auto o = flatbuffers::Offset<Enum>(end);
    373     fbb_.Required(o, Enum::VT_NAME);
    374     fbb_.Required(o, Enum::VT_VALUES);
    375     fbb_.Required(o, Enum::VT_UNDERLYING_TYPE);
    376     return o;
    377   }
    378 };
    379 
    380 inline flatbuffers::Offset<Enum> CreateEnum(
    381     flatbuffers::FlatBufferBuilder &_fbb,
    382     flatbuffers::Offset<flatbuffers::String> name = 0,
    383     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<EnumVal>>> values = 0,
    384     bool is_union = false,
    385     flatbuffers::Offset<Type> underlying_type = 0,
    386     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes = 0,
    387     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
    388   EnumBuilder builder_(_fbb);
    389   builder_.add_documentation(documentation);
    390   builder_.add_attributes(attributes);
    391   builder_.add_underlying_type(underlying_type);
    392   builder_.add_values(values);
    393   builder_.add_name(name);
    394   builder_.add_is_union(is_union);
    395   return builder_.Finish();
    396 }
    397 
    398 inline flatbuffers::Offset<Enum> CreateEnumDirect(
    399     flatbuffers::FlatBufferBuilder &_fbb,
    400     const char *name = nullptr,
    401     const std::vector<flatbuffers::Offset<EnumVal>> *values = nullptr,
    402     bool is_union = false,
    403     flatbuffers::Offset<Type> underlying_type = 0,
    404     const std::vector<flatbuffers::Offset<KeyValue>> *attributes = nullptr,
    405     const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
    406   return reflection::CreateEnum(
    407       _fbb,
    408       name ? _fbb.CreateString(name) : 0,
    409       values ? _fbb.CreateVector<flatbuffers::Offset<EnumVal>>(*values) : 0,
    410       is_union,
    411       underlying_type,
    412       attributes ? _fbb.CreateVector<flatbuffers::Offset<KeyValue>>(*attributes) : 0,
    413       documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0);
    414 }
    415 
    416 struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    417   enum {
    418     VT_NAME = 4,
    419     VT_TYPE = 6,
    420     VT_ID = 8,
    421     VT_OFFSET = 10,
    422     VT_DEFAULT_INTEGER = 12,
    423     VT_DEFAULT_REAL = 14,
    424     VT_DEPRECATED = 16,
    425     VT_REQUIRED = 18,
    426     VT_KEY = 20,
    427     VT_ATTRIBUTES = 22,
    428     VT_DOCUMENTATION = 24
    429   };
    430   const flatbuffers::String *name() const {
    431     return GetPointer<const flatbuffers::String *>(VT_NAME);
    432   }
    433   bool KeyCompareLessThan(const Field *o) const {
    434     return *name() < *o->name();
    435   }
    436   int KeyCompareWithValue(const char *val) const {
    437     return strcmp(name()->c_str(), val);
    438   }
    439   const Type *type() const {
    440     return GetPointer<const Type *>(VT_TYPE);
    441   }
    442   uint16_t id() const {
    443     return GetField<uint16_t>(VT_ID, 0);
    444   }
    445   uint16_t offset() const {
    446     return GetField<uint16_t>(VT_OFFSET, 0);
    447   }
    448   int64_t default_integer() const {
    449     return GetField<int64_t>(VT_DEFAULT_INTEGER, 0);
    450   }
    451   double default_real() const {
    452     return GetField<double>(VT_DEFAULT_REAL, 0.0);
    453   }
    454   bool deprecated() const {
    455     return GetField<uint8_t>(VT_DEPRECATED, 0) != 0;
    456   }
    457   bool required() const {
    458     return GetField<uint8_t>(VT_REQUIRED, 0) != 0;
    459   }
    460   bool key() const {
    461     return GetField<uint8_t>(VT_KEY, 0) != 0;
    462   }
    463   const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *attributes() const {
    464     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *>(VT_ATTRIBUTES);
    465   }
    466   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
    467     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
    468   }
    469   bool Verify(flatbuffers::Verifier &verifier) const {
    470     return VerifyTableStart(verifier) &&
    471            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
    472            verifier.Verify(name()) &&
    473            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_TYPE) &&
    474            verifier.VerifyTable(type()) &&
    475            VerifyField<uint16_t>(verifier, VT_ID) &&
    476            VerifyField<uint16_t>(verifier, VT_OFFSET) &&
    477            VerifyField<int64_t>(verifier, VT_DEFAULT_INTEGER) &&
    478            VerifyField<double>(verifier, VT_DEFAULT_REAL) &&
    479            VerifyField<uint8_t>(verifier, VT_DEPRECATED) &&
    480            VerifyField<uint8_t>(verifier, VT_REQUIRED) &&
    481            VerifyField<uint8_t>(verifier, VT_KEY) &&
    482            VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) &&
    483            verifier.Verify(attributes()) &&
    484            verifier.VerifyVectorOfTables(attributes()) &&
    485            VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) &&
    486            verifier.Verify(documentation()) &&
    487            verifier.VerifyVectorOfStrings(documentation()) &&
    488            verifier.EndTable();
    489   }
    490 };
    491 
    492 struct FieldBuilder {
    493   flatbuffers::FlatBufferBuilder &fbb_;
    494   flatbuffers::uoffset_t start_;
    495   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
    496     fbb_.AddOffset(Field::VT_NAME, name);
    497   }
    498   void add_type(flatbuffers::Offset<Type> type) {
    499     fbb_.AddOffset(Field::VT_TYPE, type);
    500   }
    501   void add_id(uint16_t id) {
    502     fbb_.AddElement<uint16_t>(Field::VT_ID, id, 0);
    503   }
    504   void add_offset(uint16_t offset) {
    505     fbb_.AddElement<uint16_t>(Field::VT_OFFSET, offset, 0);
    506   }
    507   void add_default_integer(int64_t default_integer) {
    508     fbb_.AddElement<int64_t>(Field::VT_DEFAULT_INTEGER, default_integer, 0);
    509   }
    510   void add_default_real(double default_real) {
    511     fbb_.AddElement<double>(Field::VT_DEFAULT_REAL, default_real, 0.0);
    512   }
    513   void add_deprecated(bool deprecated) {
    514     fbb_.AddElement<uint8_t>(Field::VT_DEPRECATED, static_cast<uint8_t>(deprecated), 0);
    515   }
    516   void add_required(bool required) {
    517     fbb_.AddElement<uint8_t>(Field::VT_REQUIRED, static_cast<uint8_t>(required), 0);
    518   }
    519   void add_key(bool key) {
    520     fbb_.AddElement<uint8_t>(Field::VT_KEY, static_cast<uint8_t>(key), 0);
    521   }
    522   void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes) {
    523     fbb_.AddOffset(Field::VT_ATTRIBUTES, attributes);
    524   }
    525   void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
    526     fbb_.AddOffset(Field::VT_DOCUMENTATION, documentation);
    527   }
    528   FieldBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    529         : fbb_(_fbb) {
    530     start_ = fbb_.StartTable();
    531   }
    532   FieldBuilder &operator=(const FieldBuilder &);
    533   flatbuffers::Offset<Field> Finish() {
    534     const auto end = fbb_.EndTable(start_, 11);
    535     auto o = flatbuffers::Offset<Field>(end);
    536     fbb_.Required(o, Field::VT_NAME);
    537     fbb_.Required(o, Field::VT_TYPE);
    538     return o;
    539   }
    540 };
    541 
    542 inline flatbuffers::Offset<Field> CreateField(
    543     flatbuffers::FlatBufferBuilder &_fbb,
    544     flatbuffers::Offset<flatbuffers::String> name = 0,
    545     flatbuffers::Offset<Type> type = 0,
    546     uint16_t id = 0,
    547     uint16_t offset = 0,
    548     int64_t default_integer = 0,
    549     double default_real = 0.0,
    550     bool deprecated = false,
    551     bool required = false,
    552     bool key = false,
    553     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes = 0,
    554     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
    555   FieldBuilder builder_(_fbb);
    556   builder_.add_default_real(default_real);
    557   builder_.add_default_integer(default_integer);
    558   builder_.add_documentation(documentation);
    559   builder_.add_attributes(attributes);
    560   builder_.add_type(type);
    561   builder_.add_name(name);
    562   builder_.add_offset(offset);
    563   builder_.add_id(id);
    564   builder_.add_key(key);
    565   builder_.add_required(required);
    566   builder_.add_deprecated(deprecated);
    567   return builder_.Finish();
    568 }
    569 
    570 inline flatbuffers::Offset<Field> CreateFieldDirect(
    571     flatbuffers::FlatBufferBuilder &_fbb,
    572     const char *name = nullptr,
    573     flatbuffers::Offset<Type> type = 0,
    574     uint16_t id = 0,
    575     uint16_t offset = 0,
    576     int64_t default_integer = 0,
    577     double default_real = 0.0,
    578     bool deprecated = false,
    579     bool required = false,
    580     bool key = false,
    581     const std::vector<flatbuffers::Offset<KeyValue>> *attributes = nullptr,
    582     const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
    583   return reflection::CreateField(
    584       _fbb,
    585       name ? _fbb.CreateString(name) : 0,
    586       type,
    587       id,
    588       offset,
    589       default_integer,
    590       default_real,
    591       deprecated,
    592       required,
    593       key,
    594       attributes ? _fbb.CreateVector<flatbuffers::Offset<KeyValue>>(*attributes) : 0,
    595       documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0);
    596 }
    597 
    598 struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    599   enum {
    600     VT_NAME = 4,
    601     VT_FIELDS = 6,
    602     VT_IS_STRUCT = 8,
    603     VT_MINALIGN = 10,
    604     VT_BYTESIZE = 12,
    605     VT_ATTRIBUTES = 14,
    606     VT_DOCUMENTATION = 16
    607   };
    608   const flatbuffers::String *name() const {
    609     return GetPointer<const flatbuffers::String *>(VT_NAME);
    610   }
    611   bool KeyCompareLessThan(const Object *o) const {
    612     return *name() < *o->name();
    613   }
    614   int KeyCompareWithValue(const char *val) const {
    615     return strcmp(name()->c_str(), val);
    616   }
    617   const flatbuffers::Vector<flatbuffers::Offset<Field>> *fields() const {
    618     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Field>> *>(VT_FIELDS);
    619   }
    620   bool is_struct() const {
    621     return GetField<uint8_t>(VT_IS_STRUCT, 0) != 0;
    622   }
    623   int32_t minalign() const {
    624     return GetField<int32_t>(VT_MINALIGN, 0);
    625   }
    626   int32_t bytesize() const {
    627     return GetField<int32_t>(VT_BYTESIZE, 0);
    628   }
    629   const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *attributes() const {
    630     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<KeyValue>> *>(VT_ATTRIBUTES);
    631   }
    632   const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *documentation() const {
    633     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_DOCUMENTATION);
    634   }
    635   bool Verify(flatbuffers::Verifier &verifier) const {
    636     return VerifyTableStart(verifier) &&
    637            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
    638            verifier.Verify(name()) &&
    639            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_FIELDS) &&
    640            verifier.Verify(fields()) &&
    641            verifier.VerifyVectorOfTables(fields()) &&
    642            VerifyField<uint8_t>(verifier, VT_IS_STRUCT) &&
    643            VerifyField<int32_t>(verifier, VT_MINALIGN) &&
    644            VerifyField<int32_t>(verifier, VT_BYTESIZE) &&
    645            VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) &&
    646            verifier.Verify(attributes()) &&
    647            verifier.VerifyVectorOfTables(attributes()) &&
    648            VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) &&
    649            verifier.Verify(documentation()) &&
    650            verifier.VerifyVectorOfStrings(documentation()) &&
    651            verifier.EndTable();
    652   }
    653 };
    654 
    655 struct ObjectBuilder {
    656   flatbuffers::FlatBufferBuilder &fbb_;
    657   flatbuffers::uoffset_t start_;
    658   void add_name(flatbuffers::Offset<flatbuffers::String> name) {
    659     fbb_.AddOffset(Object::VT_NAME, name);
    660   }
    661   void add_fields(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Field>>> fields) {
    662     fbb_.AddOffset(Object::VT_FIELDS, fields);
    663   }
    664   void add_is_struct(bool is_struct) {
    665     fbb_.AddElement<uint8_t>(Object::VT_IS_STRUCT, static_cast<uint8_t>(is_struct), 0);
    666   }
    667   void add_minalign(int32_t minalign) {
    668     fbb_.AddElement<int32_t>(Object::VT_MINALIGN, minalign, 0);
    669   }
    670   void add_bytesize(int32_t bytesize) {
    671     fbb_.AddElement<int32_t>(Object::VT_BYTESIZE, bytesize, 0);
    672   }
    673   void add_attributes(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes) {
    674     fbb_.AddOffset(Object::VT_ATTRIBUTES, attributes);
    675   }
    676   void add_documentation(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation) {
    677     fbb_.AddOffset(Object::VT_DOCUMENTATION, documentation);
    678   }
    679   ObjectBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    680         : fbb_(_fbb) {
    681     start_ = fbb_.StartTable();
    682   }
    683   ObjectBuilder &operator=(const ObjectBuilder &);
    684   flatbuffers::Offset<Object> Finish() {
    685     const auto end = fbb_.EndTable(start_, 7);
    686     auto o = flatbuffers::Offset<Object>(end);
    687     fbb_.Required(o, Object::VT_NAME);
    688     fbb_.Required(o, Object::VT_FIELDS);
    689     return o;
    690   }
    691 };
    692 
    693 inline flatbuffers::Offset<Object> CreateObject(
    694     flatbuffers::FlatBufferBuilder &_fbb,
    695     flatbuffers::Offset<flatbuffers::String> name = 0,
    696     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Field>>> fields = 0,
    697     bool is_struct = false,
    698     int32_t minalign = 0,
    699     int32_t bytesize = 0,
    700     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<KeyValue>>> attributes = 0,
    701     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> documentation = 0) {
    702   ObjectBuilder builder_(_fbb);
    703   builder_.add_documentation(documentation);
    704   builder_.add_attributes(attributes);
    705   builder_.add_bytesize(bytesize);
    706   builder_.add_minalign(minalign);
    707   builder_.add_fields(fields);
    708   builder_.add_name(name);
    709   builder_.add_is_struct(is_struct);
    710   return builder_.Finish();
    711 }
    712 
    713 inline flatbuffers::Offset<Object> CreateObjectDirect(
    714     flatbuffers::FlatBufferBuilder &_fbb,
    715     const char *name = nullptr,
    716     const std::vector<flatbuffers::Offset<Field>> *fields = nullptr,
    717     bool is_struct = false,
    718     int32_t minalign = 0,
    719     int32_t bytesize = 0,
    720     const std::vector<flatbuffers::Offset<KeyValue>> *attributes = nullptr,
    721     const std::vector<flatbuffers::Offset<flatbuffers::String>> *documentation = nullptr) {
    722   return reflection::CreateObject(
    723       _fbb,
    724       name ? _fbb.CreateString(name) : 0,
    725       fields ? _fbb.CreateVector<flatbuffers::Offset<Field>>(*fields) : 0,
    726       is_struct,
    727       minalign,
    728       bytesize,
    729       attributes ? _fbb.CreateVector<flatbuffers::Offset<KeyValue>>(*attributes) : 0,
    730       documentation ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*documentation) : 0);
    731 }
    732 
    733 struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
    734   enum {
    735     VT_OBJECTS = 4,
    736     VT_ENUMS = 6,
    737     VT_FILE_IDENT = 8,
    738     VT_FILE_EXT = 10,
    739     VT_ROOT_TABLE = 12
    740   };
    741   const flatbuffers::Vector<flatbuffers::Offset<Object>> *objects() const {
    742     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Object>> *>(VT_OBJECTS);
    743   }
    744   const flatbuffers::Vector<flatbuffers::Offset<Enum>> *enums() const {
    745     return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<Enum>> *>(VT_ENUMS);
    746   }
    747   const flatbuffers::String *file_ident() const {
    748     return GetPointer<const flatbuffers::String *>(VT_FILE_IDENT);
    749   }
    750   const flatbuffers::String *file_ext() const {
    751     return GetPointer<const flatbuffers::String *>(VT_FILE_EXT);
    752   }
    753   const Object *root_table() const {
    754     return GetPointer<const Object *>(VT_ROOT_TABLE);
    755   }
    756   bool Verify(flatbuffers::Verifier &verifier) const {
    757     return VerifyTableStart(verifier) &&
    758            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_OBJECTS) &&
    759            verifier.Verify(objects()) &&
    760            verifier.VerifyVectorOfTables(objects()) &&
    761            VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_ENUMS) &&
    762            verifier.Verify(enums()) &&
    763            verifier.VerifyVectorOfTables(enums()) &&
    764            VerifyField<flatbuffers::uoffset_t>(verifier, VT_FILE_IDENT) &&
    765            verifier.Verify(file_ident()) &&
    766            VerifyField<flatbuffers::uoffset_t>(verifier, VT_FILE_EXT) &&
    767            verifier.Verify(file_ext()) &&
    768            VerifyField<flatbuffers::uoffset_t>(verifier, VT_ROOT_TABLE) &&
    769            verifier.VerifyTable(root_table()) &&
    770            verifier.EndTable();
    771   }
    772 };
    773 
    774 struct SchemaBuilder {
    775   flatbuffers::FlatBufferBuilder &fbb_;
    776   flatbuffers::uoffset_t start_;
    777   void add_objects(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Object>>> objects) {
    778     fbb_.AddOffset(Schema::VT_OBJECTS, objects);
    779   }
    780   void add_enums(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Enum>>> enums) {
    781     fbb_.AddOffset(Schema::VT_ENUMS, enums);
    782   }
    783   void add_file_ident(flatbuffers::Offset<flatbuffers::String> file_ident) {
    784     fbb_.AddOffset(Schema::VT_FILE_IDENT, file_ident);
    785   }
    786   void add_file_ext(flatbuffers::Offset<flatbuffers::String> file_ext) {
    787     fbb_.AddOffset(Schema::VT_FILE_EXT, file_ext);
    788   }
    789   void add_root_table(flatbuffers::Offset<Object> root_table) {
    790     fbb_.AddOffset(Schema::VT_ROOT_TABLE, root_table);
    791   }
    792   SchemaBuilder(flatbuffers::FlatBufferBuilder &_fbb)
    793         : fbb_(_fbb) {
    794     start_ = fbb_.StartTable();
    795   }
    796   SchemaBuilder &operator=(const SchemaBuilder &);
    797   flatbuffers::Offset<Schema> Finish() {
    798     const auto end = fbb_.EndTable(start_, 5);
    799     auto o = flatbuffers::Offset<Schema>(end);
    800     fbb_.Required(o, Schema::VT_OBJECTS);
    801     fbb_.Required(o, Schema::VT_ENUMS);
    802     return o;
    803   }
    804 };
    805 
    806 inline flatbuffers::Offset<Schema> CreateSchema(
    807     flatbuffers::FlatBufferBuilder &_fbb,
    808     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Object>>> objects = 0,
    809     flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<Enum>>> enums = 0,
    810     flatbuffers::Offset<flatbuffers::String> file_ident = 0,
    811     flatbuffers::Offset<flatbuffers::String> file_ext = 0,
    812     flatbuffers::Offset<Object> root_table = 0) {
    813   SchemaBuilder builder_(_fbb);
    814   builder_.add_root_table(root_table);
    815   builder_.add_file_ext(file_ext);
    816   builder_.add_file_ident(file_ident);
    817   builder_.add_enums(enums);
    818   builder_.add_objects(objects);
    819   return builder_.Finish();
    820 }
    821 
    822 inline flatbuffers::Offset<Schema> CreateSchemaDirect(
    823     flatbuffers::FlatBufferBuilder &_fbb,
    824     const std::vector<flatbuffers::Offset<Object>> *objects = nullptr,
    825     const std::vector<flatbuffers::Offset<Enum>> *enums = nullptr,
    826     const char *file_ident = nullptr,
    827     const char *file_ext = nullptr,
    828     flatbuffers::Offset<Object> root_table = 0) {
    829   return reflection::CreateSchema(
    830       _fbb,
    831       objects ? _fbb.CreateVector<flatbuffers::Offset<Object>>(*objects) : 0,
    832       enums ? _fbb.CreateVector<flatbuffers::Offset<Enum>>(*enums) : 0,
    833       file_ident ? _fbb.CreateString(file_ident) : 0,
    834       file_ext ? _fbb.CreateString(file_ext) : 0,
    835       root_table);
    836 }
    837 
    838 inline const reflection::Schema *GetSchema(const void *buf) {
    839   return flatbuffers::GetRoot<reflection::Schema>(buf);
    840 }
    841 
    842 inline const char *SchemaIdentifier() {
    843   return "BFBS";
    844 }
    845 
    846 inline bool SchemaBufferHasIdentifier(const void *buf) {
    847   return flatbuffers::BufferHasIdentifier(
    848       buf, SchemaIdentifier());
    849 }
    850 
    851 inline bool VerifySchemaBuffer(
    852     flatbuffers::Verifier &verifier) {
    853   return verifier.VerifyBuffer<reflection::Schema>(SchemaIdentifier());
    854 }
    855 
    856 inline const char *SchemaExtension() {
    857   return "bfbs";
    858 }
    859 
    860 inline void FinishSchemaBuffer(
    861     flatbuffers::FlatBufferBuilder &fbb,
    862     flatbuffers::Offset<reflection::Schema> root) {
    863   fbb.Finish(root, SchemaIdentifier());
    864 }
    865 
    866 }  // namespace reflection
    867 
    868 #endif  // FLATBUFFERS_GENERATED_REFLECTION_REFLECTION_H_
    869