diff --git a/include/flatbuffers/reflection_generated.h b/include/flatbuffers/reflection_generated.h index eb981857b..a459aa6a6 100644 --- a/include/flatbuffers/reflection_generated.h +++ b/include/flatbuffers/reflection_generated.h @@ -39,8 +39,6 @@ enum BaseType { Vector = 14, Obj = 15, Union = 16, - MIN = None, - MAX = Union }; inline const char **EnumNamesBaseType() { @@ -83,9 +81,9 @@ struct TypeBuilder { }; inline flatbuffers::Offset CreateType(flatbuffers::FlatBufferBuilder &_fbb, - BaseType base_type = None, - BaseType element = None, - int32_t index = -1) { + BaseType base_type = None, + BaseType element = None, + int32_t index = -1) { TypeBuilder builder_(_fbb); builder_.add_index(index); builder_.add_element(element); @@ -127,14 +125,20 @@ struct KeyValueBuilder { }; inline flatbuffers::Offset CreateKeyValue(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset key = 0, - flatbuffers::Offset value = 0) { + flatbuffers::Offset key = 0, + flatbuffers::Offset value = 0) { KeyValueBuilder builder_(_fbb); builder_.add_value(value); builder_.add_key(key); return builder_.Finish(); } +inline flatbuffers::Offset CreateKeyValue(flatbuffers::FlatBufferBuilder &_fbb, + const char *key = nullptr, + const char *value = nullptr) { + return CreateKeyValue(_fbb, key ? 0 : _fbb.CreateString(key), value ? 0 : _fbb.CreateString(value)); +} + struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum { VT_NAME = 4, @@ -173,9 +177,9 @@ struct EnumValBuilder { }; inline flatbuffers::Offset CreateEnumVal(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset name = 0, - int64_t value = 0, - flatbuffers::Offset object = 0) { + flatbuffers::Offset name = 0, + int64_t value = 0, + flatbuffers::Offset object = 0) { EnumValBuilder builder_(_fbb); builder_.add_value(value); builder_.add_object(object); @@ -183,6 +187,13 @@ inline flatbuffers::Offset CreateEnumVal(flatbuffers::FlatBufferBuilder return builder_.Finish(); } +inline flatbuffers::Offset CreateEnumVal(flatbuffers::FlatBufferBuilder &_fbb, + const char *name = nullptr, + int64_t value = 0, + flatbuffers::Offset object = 0) { + return CreateEnumVal(_fbb, name ? 0 : _fbb.CreateString(name), value, object); +} + struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum { VT_NAME = 4, @@ -235,11 +246,11 @@ struct EnumBuilder { }; inline flatbuffers::Offset CreateEnum(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset name = 0, - flatbuffers::Offset>> values = 0, - bool is_union = false, - flatbuffers::Offset underlying_type = 0, - flatbuffers::Offset>> attributes = 0) { + flatbuffers::Offset name = 0, + flatbuffers::Offset>> values = 0, + bool is_union = false, + flatbuffers::Offset underlying_type = 0, + flatbuffers::Offset>> attributes = 0) { EnumBuilder builder_(_fbb); builder_.add_attributes(attributes); builder_.add_underlying_type(underlying_type); @@ -249,6 +260,15 @@ inline flatbuffers::Offset CreateEnum(flatbuffers::FlatBufferBuilder &_fbb return builder_.Finish(); } +inline flatbuffers::Offset CreateEnum(flatbuffers::FlatBufferBuilder &_fbb, + const char *name = nullptr, + const std::vector> *values = nullptr, + bool is_union = false, + flatbuffers::Offset underlying_type = 0, + const std::vector> *attributes = nullptr) { + return CreateEnum(_fbb, name ? 0 : _fbb.CreateString(name), values ? 0 : _fbb.CreateVector>(*values), is_union, underlying_type, attributes ? 0 : _fbb.CreateVector>(*attributes)); +} + struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum { VT_NAME = 4, @@ -318,16 +338,16 @@ struct FieldBuilder { }; inline flatbuffers::Offset CreateField(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset name = 0, - flatbuffers::Offset type = 0, - uint16_t id = 0, - uint16_t offset = 0, - int64_t default_integer = 0, - double default_real = 0.0, - bool deprecated = false, - bool required = false, - bool key = false, - flatbuffers::Offset>> attributes = 0) { + flatbuffers::Offset name = 0, + flatbuffers::Offset type = 0, + uint16_t id = 0, + uint16_t offset = 0, + int64_t default_integer = 0, + double default_real = 0.0, + bool deprecated = false, + bool required = false, + bool key = false, + flatbuffers::Offset>> attributes = 0) { FieldBuilder builder_(_fbb); builder_.add_default_real(default_real); builder_.add_default_integer(default_integer); @@ -342,6 +362,20 @@ inline flatbuffers::Offset CreateField(flatbuffers::FlatBufferBuilder &_f return builder_.Finish(); } +inline flatbuffers::Offset CreateField(flatbuffers::FlatBufferBuilder &_fbb, + const char *name = nullptr, + flatbuffers::Offset type = 0, + uint16_t id = 0, + uint16_t offset = 0, + int64_t default_integer = 0, + double default_real = 0.0, + bool deprecated = false, + bool required = false, + bool key = false, + const std::vector> *attributes = nullptr) { + return CreateField(_fbb, name ? 0 : _fbb.CreateString(name), type, id, offset, default_integer, default_real, deprecated, required, key, attributes ? 0 : _fbb.CreateVector>(*attributes)); +} + struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum { VT_NAME = 4, @@ -396,12 +430,12 @@ struct ObjectBuilder { }; inline flatbuffers::Offset CreateObject(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset name = 0, - flatbuffers::Offset>> fields = 0, - bool is_struct = false, - int32_t minalign = 0, - int32_t bytesize = 0, - flatbuffers::Offset>> attributes = 0) { + flatbuffers::Offset name = 0, + flatbuffers::Offset>> fields = 0, + bool is_struct = false, + int32_t minalign = 0, + int32_t bytesize = 0, + flatbuffers::Offset>> attributes = 0) { ObjectBuilder builder_(_fbb); builder_.add_attributes(attributes); builder_.add_bytesize(bytesize); @@ -412,6 +446,16 @@ inline flatbuffers::Offset CreateObject(flatbuffers::FlatBufferBuilder & return builder_.Finish(); } +inline flatbuffers::Offset CreateObject(flatbuffers::FlatBufferBuilder &_fbb, + const char *name = nullptr, + const std::vector> *fields = nullptr, + bool is_struct = false, + int32_t minalign = 0, + int32_t bytesize = 0, + const std::vector> *attributes = nullptr) { + return CreateObject(_fbb, name ? 0 : _fbb.CreateString(name), fields ? 0 : _fbb.CreateVector>(*fields), is_struct, minalign, bytesize, attributes ? 0 : _fbb.CreateVector>(*attributes)); +} + struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum { VT_OBJECTS = 4, @@ -462,11 +506,11 @@ struct SchemaBuilder { }; inline flatbuffers::Offset CreateSchema(flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset>> objects = 0, - flatbuffers::Offset>> enums = 0, - flatbuffers::Offset file_ident = 0, - flatbuffers::Offset file_ext = 0, - flatbuffers::Offset root_table = 0) { + flatbuffers::Offset>> objects = 0, + flatbuffers::Offset>> enums = 0, + flatbuffers::Offset file_ident = 0, + flatbuffers::Offset file_ext = 0, + flatbuffers::Offset root_table = 0) { SchemaBuilder builder_(_fbb); builder_.add_root_table(root_table); builder_.add_file_ext(file_ext); @@ -476,6 +520,15 @@ inline flatbuffers::Offset CreateSchema(flatbuffers::FlatBufferBuilder & return builder_.Finish(); } +inline flatbuffers::Offset CreateSchema(flatbuffers::FlatBufferBuilder &_fbb, + const std::vector> *objects = nullptr, + const std::vector> *enums = nullptr, + const char *file_ident = nullptr, + const char *file_ext = nullptr, + flatbuffers::Offset root_table = 0) { + return CreateSchema(_fbb, objects ? 0 : _fbb.CreateVector>(*objects), enums ? 0 : _fbb.CreateVector>(*enums), file_ident ? 0 : _fbb.CreateString(file_ident), file_ext ? 0 : _fbb.CreateString(file_ext), root_table); +} + inline const reflection::Schema *GetSchema(const void *buf) { return flatbuffers::GetRoot(buf); } inline const char *SchemaIdentifier() { return "BFBS"; } diff --git a/samples/monster_generated.h b/samples/monster_generated.h index 636aa3771..783d1c7f0 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -263,9 +263,9 @@ inline std::unique_ptr Monster::UnPack() const { { auto _e = mana(); _o->mana = _e; }; { auto _e = hp(); _o->hp = _e; }; { auto _e = name(); if (_e) _o->name = _e->str(); }; - { auto _e = inventory(); if (_e) { for (size_t _i = 0; _i < _e->size(); _i++) { _o->inventory.push_back(_e->Get(_i)); } } }; + { auto _e = inventory(); if (_e) { for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->inventory.push_back(_e->Get(_i)); } } }; { auto _e = color(); _o->color = _e; }; - { auto _e = weapons(); if (_e) { for (size_t _i = 0; _i < _e->size(); _i++) { _o->weapons.push_back(_e->Get(_i)->UnPack()); } } }; + { auto _e = weapons(); if (_e) { for (flatbuffers::uoffset_t _i = 0; _i < _e->size(); _i++) { _o->weapons.push_back(_e->Get(_i)->UnPack()); } } }; { auto _e = equipped_type(); _o->equipped.type = _e; }; { auto _e = equipped(); if (_e) _o->equipped.table = EquipmentUnion::UnPack(_e, equipped_type()); }; return std::unique_ptr(_o); diff --git a/tests/MyGame/Example2/Monster.go b/tests/MyGame/Example2/Monster.go index e12b05453..789d46782 100644 --- a/tests/MyGame/Example2/Monster.go +++ b/tests/MyGame/Example2/Monster.go @@ -9,6 +9,13 @@ type Monster struct { _tab flatbuffers.Table } +func GetRootAsMonster(buf []byte, offset flatbuffers.UOffsetT) *Monster { + n := flatbuffers.GetUOffsetT(buf[offset:]) + x := &Monster{} + x.Init(buf, n + offset) + return x +} + func (rcv *Monster) Init(buf []byte, i flatbuffers.UOffsetT) { rcv._tab.Bytes = buf rcv._tab.Pos = i diff --git a/tests/MyGame/Example2/Monster.py b/tests/MyGame/Example2/Monster.py index 0b98211e4..d334f8ea2 100644 --- a/tests/MyGame/Example2/Monster.py +++ b/tests/MyGame/Example2/Monster.py @@ -7,6 +7,13 @@ import flatbuffers class Monster(object): __slots__ = ['_tab'] + @classmethod + def GetRootAsMonster(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = Monster() + x.Init(buf, n + offset) + return x + # Monster def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/tests/generate_code.sh b/tests/generate_code.sh index 1b347ba79..bf6f3c8eb 100644 --- a/tests/generate_code.sh +++ b/tests/generate_code.sh @@ -17,4 +17,7 @@ ../flatc --cpp --java --csharp --go --binary --python --js --php --grpc --gen-mutable --gen-object-api --no-includes monster_test.fbs monsterdata_test.json ../flatc --cpp --java --csharp --go --binary --python --js --php --gen-mutable -o namespace_test namespace_test/namespace_test1.fbs namespace_test/namespace_test2.fbs ../flatc --binary --schema monster_test.fbs - +cd ../samples +../flatc --cpp --gen-mutable --gen-object-api monster.fbs +cd ../reflection +sh generate_code.sh diff --git a/tests/monster_test.bfbs b/tests/monster_test.bfbs index 1e8a270d8..e131ac8c2 100644 Binary files a/tests/monster_test.bfbs and b/tests/monster_test.bfbs differ diff --git a/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go b/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go index c956fb42c..2d7705730 100644 --- a/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go +++ b/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.go @@ -9,6 +9,13 @@ type TableInNestedNS struct { _tab flatbuffers.Table } +func GetRootAsTableInNestedNS(buf []byte, offset flatbuffers.UOffsetT) *TableInNestedNS { + n := flatbuffers.GetUOffsetT(buf[offset:]) + x := &TableInNestedNS{} + x.Init(buf, n + offset) + return x +} + func (rcv *TableInNestedNS) Init(buf []byte, i flatbuffers.UOffsetT) { rcv._tab.Bytes = buf rcv._tab.Pos = i diff --git a/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py b/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py index e8e1f2ba7..d6d167409 100644 --- a/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py +++ b/tests/namespace_test/NamespaceA/NamespaceB/TableInNestedNS.py @@ -7,6 +7,13 @@ import flatbuffers class TableInNestedNS(object): __slots__ = ['_tab'] + @classmethod + def GetRootAsTableInNestedNS(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TableInNestedNS() + x.Init(buf, n + offset) + return x + # TableInNestedNS def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/tests/namespace_test/NamespaceA/SecondTableInA.go b/tests/namespace_test/NamespaceA/SecondTableInA.go index efc7713f8..40454419f 100644 --- a/tests/namespace_test/NamespaceA/SecondTableInA.go +++ b/tests/namespace_test/NamespaceA/SecondTableInA.go @@ -9,6 +9,13 @@ type SecondTableInA struct { _tab flatbuffers.Table } +func GetRootAsSecondTableInA(buf []byte, offset flatbuffers.UOffsetT) *SecondTableInA { + n := flatbuffers.GetUOffsetT(buf[offset:]) + x := &SecondTableInA{} + x.Init(buf, n + offset) + return x +} + func (rcv *SecondTableInA) Init(buf []byte, i flatbuffers.UOffsetT) { rcv._tab.Bytes = buf rcv._tab.Pos = i diff --git a/tests/namespace_test/NamespaceA/SecondTableInA.py b/tests/namespace_test/NamespaceA/SecondTableInA.py index ab11701a2..20dac3e26 100644 --- a/tests/namespace_test/NamespaceA/SecondTableInA.py +++ b/tests/namespace_test/NamespaceA/SecondTableInA.py @@ -7,6 +7,13 @@ import flatbuffers class SecondTableInA(object): __slots__ = ['_tab'] + @classmethod + def GetRootAsSecondTableInA(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = SecondTableInA() + x.Init(buf, n + offset) + return x + # SecondTableInA def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/tests/namespace_test/NamespaceA/TableInFirstNS.go b/tests/namespace_test/NamespaceA/TableInFirstNS.go index 0a002b3b7..5122fd7ee 100644 --- a/tests/namespace_test/NamespaceA/TableInFirstNS.go +++ b/tests/namespace_test/NamespaceA/TableInFirstNS.go @@ -9,6 +9,13 @@ type TableInFirstNS struct { _tab flatbuffers.Table } +func GetRootAsTableInFirstNS(buf []byte, offset flatbuffers.UOffsetT) *TableInFirstNS { + n := flatbuffers.GetUOffsetT(buf[offset:]) + x := &TableInFirstNS{} + x.Init(buf, n + offset) + return x +} + func (rcv *TableInFirstNS) Init(buf []byte, i flatbuffers.UOffsetT) { rcv._tab.Bytes = buf rcv._tab.Pos = i diff --git a/tests/namespace_test/NamespaceA/TableInFirstNS.py b/tests/namespace_test/NamespaceA/TableInFirstNS.py index 3a652f495..40cbeba0d 100644 --- a/tests/namespace_test/NamespaceA/TableInFirstNS.py +++ b/tests/namespace_test/NamespaceA/TableInFirstNS.py @@ -7,6 +7,13 @@ import flatbuffers class TableInFirstNS(object): __slots__ = ['_tab'] + @classmethod + def GetRootAsTableInFirstNS(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TableInFirstNS() + x.Init(buf, n + offset) + return x + # TableInFirstNS def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos) diff --git a/tests/namespace_test/NamespaceC/TableInC.go b/tests/namespace_test/NamespaceC/TableInC.go index dc75c45c2..81c59f17e 100644 --- a/tests/namespace_test/NamespaceC/TableInC.go +++ b/tests/namespace_test/NamespaceC/TableInC.go @@ -9,6 +9,13 @@ type TableInC struct { _tab flatbuffers.Table } +func GetRootAsTableInC(buf []byte, offset flatbuffers.UOffsetT) *TableInC { + n := flatbuffers.GetUOffsetT(buf[offset:]) + x := &TableInC{} + x.Init(buf, n + offset) + return x +} + func (rcv *TableInC) Init(buf []byte, i flatbuffers.UOffsetT) { rcv._tab.Bytes = buf rcv._tab.Pos = i diff --git a/tests/namespace_test/NamespaceC/TableInC.py b/tests/namespace_test/NamespaceC/TableInC.py index 5a4376ed8..90b8736c1 100644 --- a/tests/namespace_test/NamespaceC/TableInC.py +++ b/tests/namespace_test/NamespaceC/TableInC.py @@ -7,6 +7,13 @@ import flatbuffers class TableInC(object): __slots__ = ['_tab'] + @classmethod + def GetRootAsTableInC(cls, buf, offset): + n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset) + x = TableInC() + x.Init(buf, n + offset) + return x + # TableInC def Init(self, buf, pos): self._tab = flatbuffers.table.Table(buf, pos)