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