From 9ce98dd77da56070dfaea00f4350a71121bd0180 Mon Sep 17 00:00:00 2001 From: Christian Helmich Date: Tue, 6 Mar 2018 01:40:56 +0900 Subject: [PATCH] Support attribute "cpp_ptr_type" on table elements marked as "hash" (#4643) * added intended use-cases to monster_test.fbs * added check for `cpp_ptr_type` on hashed fields added default value 'naked' to `cpp_ptr_type` on hashed fields * added C++ generation of cpp_type vectors removed ctor call for vector fields added condition !vector for cpp_type check added Pack() and UnPack() code generation for vector of hashes added generation of correct resolve/rehash for cpp_type elements * added attribute 'cpp_ptr_type_get' to hold accessor for pointer types possible where '.get()' does not work use case: cpp_ptr_type:"std::weak_ptr", cpp_ptr_type_get:".lock().get()" * run flatc to re-generate headers * added bool param is_ctor to GetDefaultScalarValue() to differentiate between usage places * modified monster_test.fbs to remove usage of shared_ptr/weak_ptr reason: STLport does not support std::shared_ptr and std::weak_ptr * run flatc again to re-generate headers * fixed symbol unique_ptr not in namespace std when building with STLport --- include/flatbuffers/idl.h | 1 + src/idl_gen_cpp.cpp | 56 +++-- src/idl_parser.cpp | 8 + tests/MyGame/Example/Monster.cs | 28 ++- tests/MyGame/Example/Monster.go | 104 ++++++++- tests/MyGame/Example/Monster.java | 31 ++- tests/MyGame/Example/Monster.php | 208 +++++++++++++++++- tests/MyGame/Example/Monster.py | 88 +++++++- tests/monster_test.bfbs | Bin 5400 -> 6112 bytes tests/monster_test.fbs | 5 + tests/monster_test.schema.json | 7 +- tests/monster_test_generated.h | 177 +++++++++++---- tests/monster_test_generated.js | 203 ++++++++++++++++- tests/monster_test_generated.ts | 203 ++++++++++++++++- .../namespace_test2_generated.ts | 20 +- tests/test.cpp | 9 + 16 files changed, 1074 insertions(+), 74 deletions(-) diff --git a/include/flatbuffers/idl.h b/include/flatbuffers/idl.h index 3cf0b1a11..40e111465 100644 --- a/include/flatbuffers/idl.h +++ b/include/flatbuffers/idl.h @@ -532,6 +532,7 @@ class Parser : public ParserState { known_attributes_["idempotent"] = true; known_attributes_["cpp_type"] = true; known_attributes_["cpp_ptr_type"] = true; + known_attributes_["cpp_ptr_type_get"] = true; known_attributes_["cpp_str_type"] = true; known_attributes_["native_inline"] = true; known_attributes_["native_custom_alloc"] = true; diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 449676daa..30bec096b 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -567,6 +567,9 @@ class CppGenerator : public BaseGenerator { } std::string GenPtrGet(const FieldDef &field) { + auto cpp_ptr_type_get = field.attributes.Lookup("cpp_ptr_type_get"); + if (cpp_ptr_type_get) + return cpp_ptr_type_get->constant; auto &ptr_type = PtrType(&field); return ptr_type == "naked" ? "" : ".get()"; } @@ -1319,7 +1322,7 @@ class CppGenerator : public BaseGenerator { : field.value.constant; } - std::string GetDefaultScalarValue(const FieldDef &field) { + std::string GetDefaultScalarValue(const FieldDef &field, bool is_ctor) { if (field.value.type.enum_def && IsScalar(field.value.type.base_type)) { auto ev = field.value.type.enum_def->ReverseLookup( StringToInt(field.value.constant.c_str()), false); @@ -1331,6 +1334,16 @@ class CppGenerator : public BaseGenerator { } } else if (field.value.type.base_type == BASE_TYPE_BOOL) { return field.value.constant == "0" ? "false" : "true"; + } else if (field.attributes.Lookup("cpp_type")) { + if (is_ctor) { + if (PtrType(&field) == "naked") { + return "nullptr"; + } else { + return ""; + } + } else { + return "0"; + } } else { return GenDefaultConstant(field); } @@ -1354,7 +1367,7 @@ class CppGenerator : public BaseGenerator { code_.SetValue("PARAM_VALUE", "nullptr"); } else { code_.SetValue("PARAM_TYPE", GenTypeWire(field.value.type, " ", true)); - code_.SetValue("PARAM_VALUE", GetDefaultScalarValue(field)); + code_.SetValue("PARAM_VALUE", GetDefaultScalarValue(field, false)); } code_ += "{{PRE}}{{PARAM_TYPE}}{{PARAM_NAME}} = {{PARAM_VALUE}}\\"; } @@ -1367,9 +1380,11 @@ class CppGenerator : public BaseGenerator { field.value.type.element != BASE_TYPE_UTYPE)) { auto type = GenTypeNative(field.value.type, false, field); auto cpp_type = field.attributes.Lookup("cpp_type"); - auto full_type = (cpp_type ? - (field.value.type.base_type == BASE_TYPE_VECTOR ? "std::vector<" + cpp_type->constant + "*> " : cpp_type->constant + " *") - : type + " "); + auto full_type = + (cpp_type ? (field.value.type.base_type == BASE_TYPE_VECTOR + ? "std::vector<" + GenTypeNativePtr(cpp_type->constant, &field, false) + "> " + : GenTypeNativePtr(cpp_type->constant, &field, false)) + : type + " "); code_.SetValue("FIELD_TYPE", full_type); code_.SetValue("FIELD_NAME", Name(field)); code_ += " {{FIELD_TYPE}}{{FIELD_NAME}};"; @@ -1386,14 +1401,14 @@ class CppGenerator : public BaseGenerator { if (!field.deprecated && // Deprecated fields won't be accessible. field.value.type.base_type != BASE_TYPE_UTYPE) { auto cpp_type = field.attributes.Lookup("cpp_type"); + auto native_default = field.attributes.Lookup("native_default"); // Scalar types get parsed defaults, raw pointers get nullptrs. if (IsScalar(field.value.type.base_type)) { if (!initializer_list.empty()) { initializer_list += ",\n "; } initializer_list += Name(field); - initializer_list += "(" + GetDefaultScalarValue(field) + ")"; + initializer_list += "(" + (native_default ? std::string(native_default->constant) : GetDefaultScalarValue(field, true)) + ")"; } else if (field.value.type.base_type == BASE_TYPE_STRUCT) { if (IsStruct(field.value.type)) { - auto native_default = field.attributes.Lookup("native_default"); if (native_default) { if (!initializer_list.empty()) { initializer_list += ",\n "; @@ -2048,12 +2063,19 @@ class CppGenerator : public BaseGenerator { // (*resolver)(&_o->field, (hash_value_t)(_e)); // else // _o->field = nullptr; + code += "//vector resolver, " + PtrType(&field) + "\n"; code += "if (_resolver) "; code += "(*_resolver)"; code += "(reinterpret_cast(&_o->" + name + "[_i]" + access + "), "; code += "static_cast(" + indexing + "));"; - code += " else "; - code += "_o->" + name + "[_i]" + access + " = nullptr"; + if (PtrType(&field) == "naked") { + code += " else "; + code += "_o->" + name + "[_i]" + access + " = nullptr"; + } else { + //code += " else "; + //code += "_o->" + name + "[_i]" + access + " = " + GenTypeNativePtr(cpp_type->constant, &field, true) + "();"; + code += "/* else do nothing */"; + } } else { code += "_o->" + name + "[_i]" + access + " = "; code += @@ -2085,12 +2107,19 @@ class CppGenerator : public BaseGenerator { // (*resolver)(&_o->field, (hash_value_t)(_e)); // else // _o->field = nullptr; + code += "//scalar resolver, " + PtrType(&field) + " \n"; code += "if (_resolver) "; code += "(*_resolver)"; code += "(reinterpret_cast(&_o->" + Name(field) + "), "; code += "static_cast(_e));"; - code += " else "; - code += "_o->" + Name(field) + " = nullptr;"; + if (PtrType(&field) == "naked") { + code += " else "; + code += "_o->" + Name(field) + " = nullptr;"; + } else { + //code += " else "; + //code += "_o->" + Name(field) + " = " + GenTypeNativePtr(cpp_type->constant, &field, true) + "();"; + code += "/* else do nothing */;"; + } } else { // Generate code for assigning the value, of the form: // _o->field = value; @@ -2116,9 +2145,10 @@ class CppGenerator : public BaseGenerator { value = "_rehasher ? " "static_cast<" + - type + ">((*_rehasher)(" + value + ")) : 0"; + type + ">((*_rehasher)(" + value + GenPtrGet(field) + ")) : 0"; } + std::string code; switch (field.value.type.base_type) { // String fields are of the form: @@ -2205,7 +2235,7 @@ class CppGenerator : public BaseGenerator { code += "[](size_t i, _VectorArgs *__va) { "; code += "return __va->__rehasher ? "; code += "static_cast<" + type + ">((*__va->__rehasher)"; - code += "(__va->_" + value + "[i]" + ")) : 0"; + code += "(__va->_" + value + "[i]" + GenPtrGet(field) + ")) : 0"; code += "; }, &_va )"; } else { code += "_fbb.CreateVector(" + value + ")"; diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp index ebb90de6f..b1a9363d8 100644 --- a/src/idl_parser.cpp +++ b/src/idl_parser.cpp @@ -711,6 +711,14 @@ CheckedError Parser::ParseField(StructDef &struct_def) { if (cpp_type) { if (!hash_name) return Error("cpp_type can only be used with a hashed field"); + /// forcing cpp_ptr_type to 'naked' if unset + auto cpp_ptr_type = field->attributes.Lookup("cpp_ptr_type"); + if (!cpp_ptr_type) { + auto val = new Value(); + val->type = cpp_type->type; + val->constant = "naked"; + field->attributes.Add("cpp_ptr_type", val); + } } if (field->deprecated && struct_def.fixed) return Error("can't deprecate fields in a struct"); diff --git a/tests/MyGame/Example/Monster.cs b/tests/MyGame/Example/Monster.cs index 05107dcde..5c5bd6aee 100644 --- a/tests/MyGame/Example/Monster.cs +++ b/tests/MyGame/Example/Monster.cs @@ -109,8 +109,23 @@ public struct Monster : IFlatbufferObject public int VectorOfWeakReferencesLength { get { int o = __p.__offset(78); return o != 0 ? __p.__vector_len(o) : 0; } } public ArraySegment? GetVectorOfWeakReferencesBytes() { return __p.__vector_as_arraysegment(78); } public bool MutateVectorOfWeakReferences(int j, ulong vector_of_weak_references) { int o = __p.__offset(78); if (o != 0) { __p.bb.PutUlong(__p.__vector(o) + j * 8, vector_of_weak_references); return true; } else { return false; } } + public Referrable? VectorOfStrongReferrables(int j) { int o = __p.__offset(80); return o != 0 ? (Referrable?)(new Referrable()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } + public int VectorOfStrongReferrablesLength { get { int o = __p.__offset(80); return o != 0 ? __p.__vector_len(o) : 0; } } + public Referrable? VectorOfStrongReferrablesByKey(ulong key) { int o = __p.__offset(80); return o != 0 ? Referrable.__lookup_by_key(__p.__vector(o), key, __p.bb) : null; } + public ulong CoOwningReference { get { int o = __p.__offset(82); return o != 0 ? __p.bb.GetUlong(o + __p.bb_pos) : (ulong)0; } } + public bool MutateCoOwningReference(ulong co_owning_reference) { int o = __p.__offset(82); if (o != 0) { __p.bb.PutUlong(o + __p.bb_pos, co_owning_reference); return true; } else { return false; } } + public ulong VectorOfCoOwningReferences(int j) { int o = __p.__offset(84); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; } + public int VectorOfCoOwningReferencesLength { get { int o = __p.__offset(84); return o != 0 ? __p.__vector_len(o) : 0; } } + public ArraySegment? GetVectorOfCoOwningReferencesBytes() { return __p.__vector_as_arraysegment(84); } + public bool MutateVectorOfCoOwningReferences(int j, ulong vector_of_co_owning_references) { int o = __p.__offset(84); if (o != 0) { __p.bb.PutUlong(__p.__vector(o) + j * 8, vector_of_co_owning_references); return true; } else { return false; } } + public ulong NonOwningReference { get { int o = __p.__offset(86); return o != 0 ? __p.bb.GetUlong(o + __p.bb_pos) : (ulong)0; } } + public bool MutateNonOwningReference(ulong non_owning_reference) { int o = __p.__offset(86); if (o != 0) { __p.bb.PutUlong(o + __p.bb_pos, non_owning_reference); return true; } else { return false; } } + public ulong VectorOfNonOwningReferences(int j) { int o = __p.__offset(88); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; } + public int VectorOfNonOwningReferencesLength { get { int o = __p.__offset(88); return o != 0 ? __p.__vector_len(o) : 0; } } + public ArraySegment? GetVectorOfNonOwningReferencesBytes() { return __p.__vector_as_arraysegment(88); } + public bool MutateVectorOfNonOwningReferences(int j, ulong vector_of_non_owning_references) { int o = __p.__offset(88); if (o != 0) { __p.bb.PutUlong(__p.__vector(o) + j * 8, vector_of_non_owning_references); return true; } else { return false; } } - public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(38); } + public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(43); } public static void AddPos(FlatBufferBuilder builder, Offset posOffset) { builder.AddStruct(0, posOffset.Value, 0); } public static void AddMana(FlatBufferBuilder builder, short mana) { builder.AddShort(1, mana, 150); } public static void AddHp(FlatBufferBuilder builder, short hp) { builder.AddShort(2, hp, 100); } @@ -173,6 +188,17 @@ public struct Monster : IFlatbufferObject public static void AddVectorOfWeakReferences(FlatBufferBuilder builder, VectorOffset vectorOfWeakReferencesOffset) { builder.AddOffset(37, vectorOfWeakReferencesOffset.Value, 0); } public static VectorOffset CreateVectorOfWeakReferencesVector(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddUlong(data[i]); return builder.EndVector(); } public static void StartVectorOfWeakReferencesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); } + public static void AddVectorOfStrongReferrables(FlatBufferBuilder builder, VectorOffset vectorOfStrongReferrablesOffset) { builder.AddOffset(38, vectorOfStrongReferrablesOffset.Value, 0); } + public static VectorOffset CreateVectorOfStrongReferrablesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static void StartVectorOfStrongReferrablesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddCoOwningReference(FlatBufferBuilder builder, ulong coOwningReference) { builder.AddUlong(39, coOwningReference, 0); } + public static void AddVectorOfCoOwningReferences(FlatBufferBuilder builder, VectorOffset vectorOfCoOwningReferencesOffset) { builder.AddOffset(40, vectorOfCoOwningReferencesOffset.Value, 0); } + public static VectorOffset CreateVectorOfCoOwningReferencesVector(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddUlong(data[i]); return builder.EndVector(); } + public static void StartVectorOfCoOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); } + public static void AddNonOwningReference(FlatBufferBuilder builder, ulong nonOwningReference) { builder.AddUlong(41, nonOwningReference, 0); } + public static void AddVectorOfNonOwningReferences(FlatBufferBuilder builder, VectorOffset vectorOfNonOwningReferencesOffset) { builder.AddOffset(42, vectorOfNonOwningReferencesOffset.Value, 0); } + public static VectorOffset CreateVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddUlong(data[i]); return builder.EndVector(); } + public static void StartVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); } public static Offset EndMonster(FlatBufferBuilder builder) { int o = builder.EndObject(); builder.Required(o, 10); // name diff --git a/tests/MyGame/Example/Monster.go b/tests/MyGame/Example/Monster.go index ec6a50fa7..4cab6b8fb 100644 --- a/tests/MyGame/Example/Monster.go +++ b/tests/MyGame/Example/Monster.go @@ -578,8 +578,86 @@ func (rcv *Monster) VectorOfWeakReferencesLength() int { return 0 } +func (rcv *Monster) VectorOfStrongReferrables(obj *Referrable, j int) bool { + o := flatbuffers.UOffsetT(rcv._tab.Offset(80)) + if o != 0 { + x := rcv._tab.Vector(o) + x += flatbuffers.UOffsetT(j) * 4 + x = rcv._tab.Indirect(x) + obj.Init(rcv._tab.Bytes, x) + return true + } + return false +} + +func (rcv *Monster) VectorOfStrongReferrablesLength() int { + o := flatbuffers.UOffsetT(rcv._tab.Offset(80)) + if o != 0 { + return rcv._tab.VectorLen(o) + } + return 0 +} + +func (rcv *Monster) CoOwningReference() uint64 { + o := flatbuffers.UOffsetT(rcv._tab.Offset(82)) + if o != 0 { + return rcv._tab.GetUint64(o + rcv._tab.Pos) + } + return 0 +} + +func (rcv *Monster) MutateCoOwningReference(n uint64) bool { + return rcv._tab.MutateUint64Slot(82, n) +} + +func (rcv *Monster) VectorOfCoOwningReferences(j int) uint64 { + o := flatbuffers.UOffsetT(rcv._tab.Offset(84)) + if o != 0 { + a := rcv._tab.Vector(o) + return rcv._tab.GetUint64(a + flatbuffers.UOffsetT(j*8)) + } + return 0 +} + +func (rcv *Monster) VectorOfCoOwningReferencesLength() int { + o := flatbuffers.UOffsetT(rcv._tab.Offset(84)) + if o != 0 { + return rcv._tab.VectorLen(o) + } + return 0 +} + +func (rcv *Monster) NonOwningReference() uint64 { + o := flatbuffers.UOffsetT(rcv._tab.Offset(86)) + if o != 0 { + return rcv._tab.GetUint64(o + rcv._tab.Pos) + } + return 0 +} + +func (rcv *Monster) MutateNonOwningReference(n uint64) bool { + return rcv._tab.MutateUint64Slot(86, n) +} + +func (rcv *Monster) VectorOfNonOwningReferences(j int) uint64 { + o := flatbuffers.UOffsetT(rcv._tab.Offset(88)) + if o != 0 { + a := rcv._tab.Vector(o) + return rcv._tab.GetUint64(a + flatbuffers.UOffsetT(j*8)) + } + return 0 +} + +func (rcv *Monster) VectorOfNonOwningReferencesLength() int { + o := flatbuffers.UOffsetT(rcv._tab.Offset(88)) + if o != 0 { + return rcv._tab.VectorLen(o) + } + return 0 +} + func MonsterStart(builder *flatbuffers.Builder) { - builder.StartObject(38) + builder.StartObject(43) } func MonsterAddPos(builder *flatbuffers.Builder, pos flatbuffers.UOffsetT) { builder.PrependStructSlot(0, flatbuffers.UOffsetT(pos), 0) @@ -734,6 +812,30 @@ func MonsterAddVectorOfWeakReferences(builder *flatbuffers.Builder, vectorOfWeak func MonsterStartVectorOfWeakReferencesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { return builder.StartVector(8, numElems, 8) } +func MonsterAddVectorOfStrongReferrables(builder *flatbuffers.Builder, vectorOfStrongReferrables flatbuffers.UOffsetT) { + builder.PrependUOffsetTSlot(38, flatbuffers.UOffsetT(vectorOfStrongReferrables), 0) +} +func MonsterStartVectorOfStrongReferrablesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { + return builder.StartVector(4, numElems, 4) +} +func MonsterAddCoOwningReference(builder *flatbuffers.Builder, coOwningReference uint64) { + builder.PrependUint64Slot(39, coOwningReference, 0) +} +func MonsterAddVectorOfCoOwningReferences(builder *flatbuffers.Builder, vectorOfCoOwningReferences flatbuffers.UOffsetT) { + builder.PrependUOffsetTSlot(40, flatbuffers.UOffsetT(vectorOfCoOwningReferences), 0) +} +func MonsterStartVectorOfCoOwningReferencesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { + return builder.StartVector(8, numElems, 8) +} +func MonsterAddNonOwningReference(builder *flatbuffers.Builder, nonOwningReference uint64) { + builder.PrependUint64Slot(41, nonOwningReference, 0) +} +func MonsterAddVectorOfNonOwningReferences(builder *flatbuffers.Builder, vectorOfNonOwningReferences flatbuffers.UOffsetT) { + builder.PrependUOffsetTSlot(42, flatbuffers.UOffsetT(vectorOfNonOwningReferences), 0) +} +func MonsterStartVectorOfNonOwningReferencesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { + return builder.StartVector(8, numElems, 8) +} func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { return builder.EndObject() } diff --git a/tests/MyGame/Example/Monster.java b/tests/MyGame/Example/Monster.java index 0b1faefdc..8bc35ca4b 100644 --- a/tests/MyGame/Example/Monster.java +++ b/tests/MyGame/Example/Monster.java @@ -128,8 +128,26 @@ public final class Monster extends Table { public ByteBuffer vectorOfWeakReferencesAsByteBuffer() { return __vector_as_bytebuffer(78, 8); } public ByteBuffer vectorOfWeakReferencesInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 78, 8); } public boolean mutateVectorOfWeakReferences(int j, long vector_of_weak_references) { int o = __offset(78); if (o != 0) { bb.putLong(__vector(o) + j * 8, vector_of_weak_references); return true; } else { return false; } } + public Referrable vectorOfStrongReferrables(int j) { return vectorOfStrongReferrables(new Referrable(), j); } + public Referrable vectorOfStrongReferrables(Referrable obj, int j) { int o = __offset(80); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; } + public int vectorOfStrongReferrablesLength() { int o = __offset(80); return o != 0 ? __vector_len(o) : 0; } + public Referrable vectorOfStrongReferrablesByKey(long key) { int o = __offset(80); return o != 0 ? Referrable.__lookup_by_key(__vector(o), key, bb) : null; } + public long coOwningReference() { int o = __offset(82); return o != 0 ? bb.getLong(o + bb_pos) : 0L; } + public boolean mutateCoOwningReference(long co_owning_reference) { int o = __offset(82); if (o != 0) { bb.putLong(o + bb_pos, co_owning_reference); return true; } else { return false; } } + public long vectorOfCoOwningReferences(int j) { int o = __offset(84); return o != 0 ? bb.getLong(__vector(o) + j * 8) : 0; } + public int vectorOfCoOwningReferencesLength() { int o = __offset(84); return o != 0 ? __vector_len(o) : 0; } + public ByteBuffer vectorOfCoOwningReferencesAsByteBuffer() { return __vector_as_bytebuffer(84, 8); } + public ByteBuffer vectorOfCoOwningReferencesInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 84, 8); } + public boolean mutateVectorOfCoOwningReferences(int j, long vector_of_co_owning_references) { int o = __offset(84); if (o != 0) { bb.putLong(__vector(o) + j * 8, vector_of_co_owning_references); return true; } else { return false; } } + public long nonOwningReference() { int o = __offset(86); return o != 0 ? bb.getLong(o + bb_pos) : 0L; } + public boolean mutateNonOwningReference(long non_owning_reference) { int o = __offset(86); if (o != 0) { bb.putLong(o + bb_pos, non_owning_reference); return true; } else { return false; } } + public long vectorOfNonOwningReferences(int j) { int o = __offset(88); return o != 0 ? bb.getLong(__vector(o) + j * 8) : 0; } + public int vectorOfNonOwningReferencesLength() { int o = __offset(88); return o != 0 ? __vector_len(o) : 0; } + public ByteBuffer vectorOfNonOwningReferencesAsByteBuffer() { return __vector_as_bytebuffer(88, 8); } + public ByteBuffer vectorOfNonOwningReferencesInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 88, 8); } + public boolean mutateVectorOfNonOwningReferences(int j, long vector_of_non_owning_references) { int o = __offset(88); if (o != 0) { bb.putLong(__vector(o) + j * 8, vector_of_non_owning_references); return true; } else { return false; } } - public static void startMonster(FlatBufferBuilder builder) { builder.startObject(38); } + public static void startMonster(FlatBufferBuilder builder) { builder.startObject(43); } public static void addPos(FlatBufferBuilder builder, int posOffset) { builder.addStruct(0, posOffset, 0); } public static void addMana(FlatBufferBuilder builder, short mana) { builder.addShort(1, mana, 150); } public static void addHp(FlatBufferBuilder builder, short hp) { builder.addShort(2, hp, 100); } @@ -192,6 +210,17 @@ public final class Monster extends Table { public static void addVectorOfWeakReferences(FlatBufferBuilder builder, int vectorOfWeakReferencesOffset) { builder.addOffset(37, vectorOfWeakReferencesOffset, 0); } public static int createVectorOfWeakReferencesVector(FlatBufferBuilder builder, long[] data) { builder.startVector(8, data.length, 8); for (int i = data.length - 1; i >= 0; i--) builder.addLong(data[i]); return builder.endVector(); } public static void startVectorOfWeakReferencesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(8, numElems, 8); } + public static void addVectorOfStrongReferrables(FlatBufferBuilder builder, int vectorOfStrongReferrablesOffset) { builder.addOffset(38, vectorOfStrongReferrablesOffset, 0); } + public static int createVectorOfStrongReferrablesVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); } + public static void startVectorOfStrongReferrablesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); } + public static void addCoOwningReference(FlatBufferBuilder builder, long coOwningReference) { builder.addLong(39, coOwningReference, 0L); } + public static void addVectorOfCoOwningReferences(FlatBufferBuilder builder, int vectorOfCoOwningReferencesOffset) { builder.addOffset(40, vectorOfCoOwningReferencesOffset, 0); } + public static int createVectorOfCoOwningReferencesVector(FlatBufferBuilder builder, long[] data) { builder.startVector(8, data.length, 8); for (int i = data.length - 1; i >= 0; i--) builder.addLong(data[i]); return builder.endVector(); } + public static void startVectorOfCoOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(8, numElems, 8); } + public static void addNonOwningReference(FlatBufferBuilder builder, long nonOwningReference) { builder.addLong(41, nonOwningReference, 0L); } + public static void addVectorOfNonOwningReferences(FlatBufferBuilder builder, int vectorOfNonOwningReferencesOffset) { builder.addOffset(42, vectorOfNonOwningReferencesOffset, 0); } + public static int createVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, long[] data) { builder.startVector(8, data.length, 8); for (int i = data.length - 1; i >= 0; i--) builder.addLong(data[i]); return builder.endVector(); } + public static void startVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(8, numElems, 8); } public static int endMonster(FlatBufferBuilder builder) { int o = builder.endObject(); builder.required(o, 10); // name diff --git a/tests/MyGame/Example/Monster.php b/tests/MyGame/Example/Monster.php index a327c3707..a40b90e12 100644 --- a/tests/MyGame/Example/Monster.php +++ b/tests/MyGame/Example/Monster.php @@ -536,22 +536,97 @@ class Monster extends Table return $o != 0 ? $this->__vector_len($o) : 0; } + /** + * @returnVectorOffset + */ + public function getVectorOfStrongReferrables($j) + { + $o = $this->__offset(80); + $obj = new Referrable(); + return $o != 0 ? $obj->init($this->__indirect($this->__vector($o) + $j * 4), $this->bb) : null; + } + + /** + * @return int + */ + public function getVectorOfStrongReferrablesLength() + { + $o = $this->__offset(80); + return $o != 0 ? $this->__vector_len($o) : 0; + } + + /** + * @return ulong + */ + public function getCoOwningReference() + { + $o = $this->__offset(82); + return $o != 0 ? $this->bb->getUlong($o + $this->bb_pos) : 0; + } + + /** + * @param int offset + * @return ulong + */ + public function getVectorOfCoOwningReferences($j) + { + $o = $this->__offset(84); + return $o != 0 ? $this->bb->getUlong($this->__vector($o) + $j * 8) : 0; + } + + /** + * @return int + */ + public function getVectorOfCoOwningReferencesLength() + { + $o = $this->__offset(84); + return $o != 0 ? $this->__vector_len($o) : 0; + } + + /** + * @return ulong + */ + public function getNonOwningReference() + { + $o = $this->__offset(86); + return $o != 0 ? $this->bb->getUlong($o + $this->bb_pos) : 0; + } + + /** + * @param int offset + * @return ulong + */ + public function getVectorOfNonOwningReferences($j) + { + $o = $this->__offset(88); + return $o != 0 ? $this->bb->getUlong($this->__vector($o) + $j * 8) : 0; + } + + /** + * @return int + */ + public function getVectorOfNonOwningReferencesLength() + { + $o = $this->__offset(88); + return $o != 0 ? $this->__vector_len($o) : 0; + } + /** * @param FlatBufferBuilder $builder * @return void */ public static function startMonster(FlatBufferBuilder $builder) { - $builder->StartObject(38); + $builder->StartObject(43); } /** * @param FlatBufferBuilder $builder * @return Monster */ - public static function createMonster(FlatBufferBuilder $builder, $pos, $mana, $hp, $name, $inventory, $color, $test_type, $test, $test4, $testarrayofstring, $testarrayoftables, $enemy, $testnestedflatbuffer, $testempty, $testbool, $testhashs32_fnv1, $testhashu32_fnv1, $testhashs64_fnv1, $testhashu64_fnv1, $testhashs32_fnv1a, $testhashu32_fnv1a, $testhashs64_fnv1a, $testhashu64_fnv1a, $testarrayofbools, $testf, $testf2, $testf3, $testarrayofstring2, $testarrayofsortedstruct, $flex, $test5, $vector_of_longs, $vector_of_doubles, $parent_namespace_test, $vector_of_referrables, $single_weak_reference, $vector_of_weak_references) + public static function createMonster(FlatBufferBuilder $builder, $pos, $mana, $hp, $name, $inventory, $color, $test_type, $test, $test4, $testarrayofstring, $testarrayoftables, $enemy, $testnestedflatbuffer, $testempty, $testbool, $testhashs32_fnv1, $testhashu32_fnv1, $testhashs64_fnv1, $testhashu64_fnv1, $testhashs32_fnv1a, $testhashu32_fnv1a, $testhashs64_fnv1a, $testhashu64_fnv1a, $testarrayofbools, $testf, $testf2, $testf3, $testarrayofstring2, $testarrayofsortedstruct, $flex, $test5, $vector_of_longs, $vector_of_doubles, $parent_namespace_test, $vector_of_referrables, $single_weak_reference, $vector_of_weak_references, $vector_of_strong_referrables, $co_owning_reference, $vector_of_co_owning_references, $non_owning_reference, $vector_of_non_owning_references) { - $builder->startObject(38); + $builder->startObject(43); self::addPos($builder, $pos); self::addMana($builder, $mana); self::addHp($builder, $hp); @@ -589,6 +664,11 @@ class Monster extends Table self::addVectorOfReferrables($builder, $vector_of_referrables); self::addSingleWeakReference($builder, $single_weak_reference); self::addVectorOfWeakReferences($builder, $vector_of_weak_references); + self::addVectorOfStrongReferrables($builder, $vector_of_strong_referrables); + self::addCoOwningReference($builder, $co_owning_reference); + self::addVectorOfCoOwningReferences($builder, $vector_of_co_owning_references); + self::addNonOwningReference($builder, $non_owning_reference); + self::addVectorOfNonOwningReferences($builder, $vector_of_non_owning_references); $o = $builder->endObject(); $builder->required($o, 10); // name return $o; @@ -1295,6 +1375,128 @@ class Monster extends Table $builder->startVector(8, $numElems, 8); } + /** + * @param FlatBufferBuilder $builder + * @param VectorOffset + * @return void + */ + public static function addVectorOfStrongReferrables(FlatBufferBuilder $builder, $vectorOfStrongReferrables) + { + $builder->addOffsetX(38, $vectorOfStrongReferrables, 0); + } + + /** + * @param FlatBufferBuilder $builder + * @param array offset array + * @return int vector offset + */ + public static function createVectorOfStrongReferrablesVector(FlatBufferBuilder $builder, array $data) + { + $builder->startVector(4, count($data), 4); + for ($i = count($data) - 1; $i >= 0; $i--) { + $builder->addOffset($data[$i]); + } + return $builder->endVector(); + } + + /** + * @param FlatBufferBuilder $builder + * @param int $numElems + * @return void + */ + public static function startVectorOfStrongReferrablesVector(FlatBufferBuilder $builder, $numElems) + { + $builder->startVector(4, $numElems, 4); + } + + /** + * @param FlatBufferBuilder $builder + * @param ulong + * @return void + */ + public static function addCoOwningReference(FlatBufferBuilder $builder, $coOwningReference) + { + $builder->addUlongX(39, $coOwningReference, 0); + } + + /** + * @param FlatBufferBuilder $builder + * @param VectorOffset + * @return void + */ + public static function addVectorOfCoOwningReferences(FlatBufferBuilder $builder, $vectorOfCoOwningReferences) + { + $builder->addOffsetX(40, $vectorOfCoOwningReferences, 0); + } + + /** + * @param FlatBufferBuilder $builder + * @param array offset array + * @return int vector offset + */ + public static function createVectorOfCoOwningReferencesVector(FlatBufferBuilder $builder, array $data) + { + $builder->startVector(8, count($data), 8); + for ($i = count($data) - 1; $i >= 0; $i--) { + $builder->addUlong($data[$i]); + } + return $builder->endVector(); + } + + /** + * @param FlatBufferBuilder $builder + * @param int $numElems + * @return void + */ + public static function startVectorOfCoOwningReferencesVector(FlatBufferBuilder $builder, $numElems) + { + $builder->startVector(8, $numElems, 8); + } + + /** + * @param FlatBufferBuilder $builder + * @param ulong + * @return void + */ + public static function addNonOwningReference(FlatBufferBuilder $builder, $nonOwningReference) + { + $builder->addUlongX(41, $nonOwningReference, 0); + } + + /** + * @param FlatBufferBuilder $builder + * @param VectorOffset + * @return void + */ + public static function addVectorOfNonOwningReferences(FlatBufferBuilder $builder, $vectorOfNonOwningReferences) + { + $builder->addOffsetX(42, $vectorOfNonOwningReferences, 0); + } + + /** + * @param FlatBufferBuilder $builder + * @param array offset array + * @return int vector offset + */ + public static function createVectorOfNonOwningReferencesVector(FlatBufferBuilder $builder, array $data) + { + $builder->startVector(8, count($data), 8); + for ($i = count($data) - 1; $i >= 0; $i--) { + $builder->addUlong($data[$i]); + } + return $builder->endVector(); + } + + /** + * @param FlatBufferBuilder $builder + * @param int $numElems + * @return void + */ + public static function startVectorOfNonOwningReferencesVector(FlatBufferBuilder $builder, $numElems) + { + $builder->startVector(8, $numElems, 8); + } + /** * @param FlatBufferBuilder $builder * @return int table offset diff --git a/tests/MyGame/Example/Monster.py b/tests/MyGame/Example/Monster.py index b99b55f87..1fe7cd70b 100644 --- a/tests/MyGame/Example/Monster.py +++ b/tests/MyGame/Example/Monster.py @@ -482,7 +482,85 @@ class Monster(object): return self._tab.VectorLen(o) return 0 -def MonsterStart(builder): builder.StartObject(38) + # Monster + def VectorOfStrongReferrables(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(80)) + if o != 0: + x = self._tab.Vector(o) + x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4 + x = self._tab.Indirect(x) + from .Referrable import Referrable + obj = Referrable() + obj.Init(self._tab.Bytes, x) + return obj + return None + + # Monster + def VectorOfStrongReferrablesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(80)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Monster + def CoOwningReference(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(82)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Monster + def VectorOfCoOwningReferences(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(84)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8)) + return 0 + + # Monster + def VectorOfCoOwningReferencesAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(84)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint64Flags, o) + return 0 + + # Monster + def VectorOfCoOwningReferencesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(84)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + + # Monster + def NonOwningReference(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(86)) + if o != 0: + return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos) + return 0 + + # Monster + def VectorOfNonOwningReferences(self, j): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(88)) + if o != 0: + a = self._tab.Vector(o) + return self._tab.Get(flatbuffers.number_types.Uint64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8)) + return 0 + + # Monster + def VectorOfNonOwningReferencesAsNumpy(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(88)) + if o != 0: + return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint64Flags, o) + return 0 + + # Monster + def VectorOfNonOwningReferencesLength(self): + o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(88)) + if o != 0: + return self._tab.VectorLen(o) + return 0 + +def MonsterStart(builder): builder.StartObject(43) def MonsterAddPos(builder, pos): builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(pos), 0) def MonsterAddMana(builder, mana): builder.PrependInt16Slot(1, mana, 150) def MonsterAddHp(builder, hp): builder.PrependInt16Slot(2, hp, 100) @@ -534,4 +612,12 @@ def MonsterStartVectorOfReferrablesVector(builder, numElems): return builder.Sta def MonsterAddSingleWeakReference(builder, singleWeakReference): builder.PrependUint64Slot(36, singleWeakReference, 0) def MonsterAddVectorOfWeakReferences(builder, vectorOfWeakReferences): builder.PrependUOffsetTRelativeSlot(37, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfWeakReferences), 0) def MonsterStartVectorOfWeakReferencesVector(builder, numElems): return builder.StartVector(8, numElems, 8) +def MonsterAddVectorOfStrongReferrables(builder, vectorOfStrongReferrables): builder.PrependUOffsetTRelativeSlot(38, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfStrongReferrables), 0) +def MonsterStartVectorOfStrongReferrablesVector(builder, numElems): return builder.StartVector(4, numElems, 4) +def MonsterAddCoOwningReference(builder, coOwningReference): builder.PrependUint64Slot(39, coOwningReference, 0) +def MonsterAddVectorOfCoOwningReferences(builder, vectorOfCoOwningReferences): builder.PrependUOffsetTRelativeSlot(40, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfCoOwningReferences), 0) +def MonsterStartVectorOfCoOwningReferencesVector(builder, numElems): return builder.StartVector(8, numElems, 8) +def MonsterAddNonOwningReference(builder, nonOwningReference): builder.PrependUint64Slot(41, nonOwningReference, 0) +def MonsterAddVectorOfNonOwningReferences(builder, vectorOfNonOwningReferences): builder.PrependUOffsetTRelativeSlot(42, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfNonOwningReferences), 0) +def MonsterStartVectorOfNonOwningReferencesVector(builder, numElems): return builder.StartVector(8, numElems, 8) def MonsterEnd(builder): return builder.EndObject() diff --git a/tests/monster_test.bfbs b/tests/monster_test.bfbs index 843e308c5204d9c36bad66ae49ac2d37041b4cce..76057281704be584128772e75e929d6ede2867cb 100644 GIT binary patch literal 6112 zcmai&e`uB08ONW*nB2tts!eTboxOIM%Q^`fT@aC?PE#v2ie_$q6tkP;z0K`z-Z$JI zQHzu@MvziQ=^wJcL`o@Aq<@T2N*PjQj8gX3kkUVjj4_6D;fosfPWA4pI%sv55uQMBb6#4Z1SRnl! zjHFfnX)QbWw*lw|q*v|GpKCQbGB7_cDpW* zFgSUWLAi3gAX_GL)5YNXh05H4usV-CMSfXc7WywSOtPJW^t*04fBW>^0mQak{%@@o z$K@hp#b@Hk!~r_ng0EZYld)U!vQ|l!{67b1{jvZ{l#JVVqheG7ZJ#1f^U|jnsSSXW z&V9vdpzm%ZwACp@7t_aa*$=(q@k}WQLPsy(y+r*V1hg)(-wf?EJhJmxFw30eOS`E1 z9qllqq>nHD#l@>rdL>J_ya}l1#F5HeP?{h+jxXe9f|2o3H2-WkQ>@O)iEjSnlf3j= zyuWQ=h3^9D)F*O9vy-=KwS(YdyFIVB@VDSE0>8wF9|GOLJ>V=b3|wRG1Nuq&Az(d_ z$lJ*?3&GxEAy*E{%-^on)GQjuF5~2(cMLk^Qj+evr|WR?pgRfODpoN`*A5;P?M~jdF9cC@AFUiNfuJqpmhBRX>8Ir!+@8pr)M zzO%V78~CD@osDLy^Fdh2RSHpJfgdxs z1^7MqBH!oO=y!mAV2JNM^p}ATp}E2Ld+4g5;}Woi@eS;(Pd)EN} znsI`*3(yR+W0QGtxvqaBG|T#Dq9*F?56JkY9ZSi0rLLdj#F}v0`p;^$&2}_Z?^-{1 zzV{JIH@B?6Tq#Ad?Qu-I}`4~P1&9aPBLGDM5(KCAk{vk3n8G}RM zVeR60wK6d;22(4U!C!~w>vkyR!*3dV5dX4%w{Z83-}sMO?MXYB;y>wQ*GD>=_!n|4 zc4aE0%$HT>rz#x4;7`K8$;MN*7rp*&t}6|?XQOI8Xy@U}+Wr*Zo1U+;Zv|hGsF&>{ zc%HC*DO-Q>gZ?N4dT@|mZM|Y@3-b#rD9VP$ad)#)V_{QD2Vr$si zjxWER0cX_)caFAEA^m+oSe=$S>(+BJXX&-ybe{Q^*`xk^QXaa+k^KsJkJ*?zN0pa4 zkHe+M|MvN&&OHoWyIGeR$2<=<{AaB;XggB=ob_>Rm7In+Oh-}C?V-2ed(=i#d=ubd z=~5nvZ!TA!7hl|^C;I1>j&bFrbmONi)BVW0JZ{6Km?GYPE@m=wJnMS_q_R;(L zCg2;O!Y23XUC-Ci$X9OQTY~Rldn&~@0$%>bacT4qyj@{_tqrI6@}94=kuUa7e0Q0D z$Tp|=E_l97BVX*F_(rI^{j7S@zmGj%Muz|Cu?mE0MSLD;tT$bDzFMpliiI%9R-%Y|tZ@JT zK2ez~l(VM_#bP!HXS3CXY$42Yh0eZ!?otlRxq7&}^DErd(d2B4^QvBZD)HfS9Xp%d zOK?tC@(_L6-w^~cp` z=+hlH3r;x^`<6k1_Y9=4S24XBUd+?UWVcyWX81?-G`4d+z+U} z#&YF=zV*VgBCgzRxWP*?8`x<>|hjg-SDu z!+9WX{`|DnvTZ&W=7hh^`Y1ZdeE6NiTc0AY{l5^EEyNbl$xg*ma?~{54d`x_c;g+@ z&D33RuzLVsWs}ZJ-;^mn4#tWm>)aK0PFa_HFA$j9=pS+%EA`7h;VZyFKzGc99mjb{ z*vnrwfA?$#4@U)xo~|dh{g|tZ)*?H#Hf@0N zP`#SyG&ct{c_ZwdrnV_t_aUbRu4JrkdVLwmoGoxK;x(XLiDM4B-n63im=ngNoKbIQ zCbqlF)h=t<0hjF7+Gl~-Zms2O!1KT`pk%m4cL`{+4kv<{?beRW)h>@$?%i?k!-^WG ztJWCw@;I5Ji=O^|%~6fhRVoktDlAR<*6V%g);fz;wcvGd&ECShJnb6g_DjI~d^d~x zbOW8vsyFyf>RoD}IStLb#P~t`=sD&$1Bv{d#N1{-u|XN%8?~>rLUD`NxNSw<*19&f z_x*a`kD;&IIv?U+EG2W${qD%1ML8;r7EYzn8_iBvAwR VbLl~AAp4u!_`R@N=EqXn{{a6@Xv+Wq literal 5400 zcmai&e`uE16~}L4j4@438m-Mz*F9!ML_*N$q(~_-Q)@+|ROgBe;+y1o%`5NwJmLM3 z#n3;743RQMkumy58AFDQ(LYKVLrVWB#lK{K3@M{X{~Du=;kvBboORuveZJ?u_sx?R zWjCDMd!PF~=bm%!x#v0WGvu6`JTiIOxlL}!b-5nb=LXysW{&^P9fD3luR(L`9jne= z?Pt#T7NChi=1)2Ipwqe00q4GAzI(HCA45wBI8VP0p50Kn!@1+&x)`50ImMoSt&%3} zIb?fpV5FV(pVp!Nd1xQ>B7}H%;?m27N<4OWsZd!c$72VROJ3#*Yd4`eD1!Fi%Q8B4 z^{vk=9I$<4hwM9!z@7BcQSBMX%b#w_AD=#vCbfE8byvK+{taM0$g*sR{zoV{N{?Bs zCK+eqTK#lM`kg7vl;iJ~>hp(_M#bH3%8(EG+%|l%s*mK!Ios%3N;B4eL5JSIm`(j! zf9Jnh)@fzAHv4HT#e&|{t)YZoI;mL^m3)M^bGszTwaam z+=9sxRy#_A0kd0p+4ll80d0qxHlD1{$JHq!<@7>fHXb`tO)IY?v*pH|6qNi3I`_Hx zb7Ro2581LK*s0y5e=pSJK3gcu-}-ZI$6vjlM;S}zYtS&%=I1k)7UF~DQlS>ty!P*c z`62WcOoyNq#-Gxkhx(wK%zr^IyMm8DTgkE~kRJRmy`;lpalc&P=I_gvOWJ zd-T7?vL)y!xKHSBp@8CVl=1KAUq{9-(e`7g&RPVm@cetsm(cEy(h%Chd^i2u&`mI( zFu%&u2M};Gcn^J4NTS#$>1ZyUZB*i2pH`>S z;`ChFAR%)N-CJL--j_-EBHnh23+1&4;x(7!E2qhYn)|KivDjRM=NoR)c(#BQpMpZF zeT)A04^4i*+@^K|{Bv%ig%9_)SdN#pzSHCJrgL||e%-xf*x(1fS0uYotrjk&#adde z$8)uMwSng*|Lyk@uiD^0vuqo0OxY7blA(8Jp1)o#B^Snt8^7<9EW2ayJ?jpv(UI^l zzT#fz?xPn|yX&{f$-`u*V0*-ZZ#@$&9^~&rCeMvW*>RiQt1fPh&-I>X!1CtT-2OH4 zk}J=ye7Sw&MDS}7@N!PxL&ihA0rGb0{^abONz<~9+gRz5|}m?0cW_0MYr_{hIcPuj={CzAqT}yAk8lJqopm&QAv}{B@7F^B#GS zWt+GO+DG^ZlH$V0m4!Mbq$_$q^cw^7v+z9Wo--cZpPi6mT|9~S=8EM)eWpR_z)5%}=Qn{4GQ9VtmS@i7x=i&N%sTO^|R4zwxG8Z)#qEZr3K1CPMw_3nb zQnuAi7s-F2u85E=zqIK|Mk259`~h_+T3KGX4qvDrtTgaJr z;R|&~@S|+i8PK_5{6?n`wbn~63-w3)IZxNA!az-Vp5S_S89h~t1iXB2!RbYsp0mwD z`3=w8s*9J|FVrUyc-f`6DkY1&uhOc{x`#h+9TT@n>eG}5^;;|0Y++5T3|Sro(4lHU zhRI(MbPAGQ#cGLDDoeDxV!7LO${59(s%X{7!inTF^$XQfS}j?aJ7M=gz71QIxT=RU zUB#(77BxCTy(C%kkqpp_n9g-uPIY$1dLO7}5+>+8Cs4B~R_7PE|DH$3PaDQIuXVR+ z>!0dKwZCesa4z!gPs1|3^r#e)f*$=iCv(PpvRZ42U-7h%*4#1guYSFI)IMV_A4|6U zG74>m+Ul*-6fP!1*z?dnNNxG6)jBcwM~2O&jigS$gLOLF?gr!bT2Xo}@`GZ^<1Cks zm@TXNORjuZ!kLR6Xa1hDeB(N_F1_Usowde~s2LB=kQWpIlBHNV1F5})oDR74ES#O> z%$2A$l36?F&;7o7OdIB;bY}Uc`1NPTphIi&RbKaTudm7IwcOx!-`T`Q^e;e<@c-F( zcCR_{b=HqUl6w#O5c&zE){V^d=%&53t{Bu=C|B&IKjLj@<(B>6yRi6Cc*>UG>(*T_ zf?tPK0WV(#`MOVo-X<-(YmD1}KPbMIp#vUg_0ao_gYSdCgwy4o$>Dy+Sc3DICFWOh znD_9n*5yOVP`?9ei{&%8<58a`j7Rstw@{}kc;(H|!Wnn9d@LTtl$wuy|54#L{=8fM zQw8d4KYitq%pt2u8CVP}4kSl$tnnk_K)M^I%z9o|ACJDKWU1Lg4(YTr%lmEy#7FiX zwQJ367@hprg~09mKFdS-Gna1*c%_FoRx^*tY&VWP?IGQTk$$V+lfw6^@v+vAH`diI zHu**wi%(GClAN+1Kl+qmzkOJ0wHr-d;l-<7I@wpJgZ^0$bG2o&cQvmB9{FO% z)?B|OAVUvwLaSd}6nTR@mwme-?WJCKtf^<)_ZHJ&lI4~!G|uOartkb?B>VTxY95MM x(LM#M50qcRyVCVHe@yUf5Sx{Y{Fg)BeCbKEZ-+rw`S$U;ekW parent_namespace_test; std::vector> vector_of_referrables; ReferrableT *single_weak_reference; - std::vector vector_of_weak_references; + std::vector vector_of_weak_references; + std::vector> vector_of_strong_referrables; + ReferrableT *co_owning_reference; + std::vector> vector_of_co_owning_references; + ReferrableT *non_owning_reference; + std::vector vector_of_non_owning_references; MonsterT() : mana(150), hp(100), @@ -725,13 +735,15 @@ struct MonsterT : public flatbuffers::NativeTable { testhashs64_fnv1(0), testhashu64_fnv1(0), testhashs32_fnv1a(0), - testhashu32_fnv1a(0), + testhashu32_fnv1a(nullptr), testhashs64_fnv1a(0), testhashu64_fnv1a(0), testf(3.14159f), testf2(3.0f), testf3(0.0f), - single_weak_reference(0) { + single_weak_reference(nullptr), + co_owning_reference(nullptr), + non_owning_reference(nullptr) { } }; @@ -778,7 +790,12 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VT_PARENT_NAMESPACE_TEST = 72, VT_VECTOR_OF_REFERRABLES = 74, VT_SINGLE_WEAK_REFERENCE = 76, - VT_VECTOR_OF_WEAK_REFERENCES = 78 + VT_VECTOR_OF_WEAK_REFERENCES = 78, + VT_VECTOR_OF_STRONG_REFERRABLES = 80, + VT_CO_OWNING_REFERENCE = 82, + VT_VECTOR_OF_CO_OWNING_REFERENCES = 84, + VT_NON_OWNING_REFERENCE = 86, + VT_VECTOR_OF_NON_OWNING_REFERENCES = 88 }; const Vec3 *pos() const { return GetStruct(VT_POS); @@ -1027,6 +1044,36 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { flatbuffers::Vector *mutable_vector_of_weak_references() { return GetPointer *>(VT_VECTOR_OF_WEAK_REFERENCES); } + const flatbuffers::Vector> *vector_of_strong_referrables() const { + return GetPointer> *>(VT_VECTOR_OF_STRONG_REFERRABLES); + } + flatbuffers::Vector> *mutable_vector_of_strong_referrables() { + return GetPointer> *>(VT_VECTOR_OF_STRONG_REFERRABLES); + } + uint64_t co_owning_reference() const { + return GetField(VT_CO_OWNING_REFERENCE, 0); + } + bool mutate_co_owning_reference(uint64_t _co_owning_reference) { + return SetField(VT_CO_OWNING_REFERENCE, _co_owning_reference, 0); + } + const flatbuffers::Vector *vector_of_co_owning_references() const { + return GetPointer *>(VT_VECTOR_OF_CO_OWNING_REFERENCES); + } + flatbuffers::Vector *mutable_vector_of_co_owning_references() { + return GetPointer *>(VT_VECTOR_OF_CO_OWNING_REFERENCES); + } + uint64_t non_owning_reference() const { + return GetField(VT_NON_OWNING_REFERENCE, 0); + } + bool mutate_non_owning_reference(uint64_t _non_owning_reference) { + return SetField(VT_NON_OWNING_REFERENCE, _non_owning_reference, 0); + } + const flatbuffers::Vector *vector_of_non_owning_references() const { + return GetPointer *>(VT_VECTOR_OF_NON_OWNING_REFERENCES); + } + flatbuffers::Vector *mutable_vector_of_non_owning_references() { + return GetPointer *>(VT_VECTOR_OF_NON_OWNING_REFERENCES); + } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && VerifyField(verifier, VT_POS) && @@ -1089,6 +1136,15 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VerifyField(verifier, VT_SINGLE_WEAK_REFERENCE) && VerifyOffset(verifier, VT_VECTOR_OF_WEAK_REFERENCES) && verifier.Verify(vector_of_weak_references()) && + VerifyOffset(verifier, VT_VECTOR_OF_STRONG_REFERRABLES) && + verifier.Verify(vector_of_strong_referrables()) && + verifier.VerifyVectorOfTables(vector_of_strong_referrables()) && + VerifyField(verifier, VT_CO_OWNING_REFERENCE) && + VerifyOffset(verifier, VT_VECTOR_OF_CO_OWNING_REFERENCES) && + verifier.Verify(vector_of_co_owning_references()) && + VerifyField(verifier, VT_NON_OWNING_REFERENCE) && + VerifyOffset(verifier, VT_VECTOR_OF_NON_OWNING_REFERENCES) && + verifier.Verify(vector_of_non_owning_references()) && verifier.EndTable(); } MonsterT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const; @@ -1222,6 +1278,21 @@ struct MonsterBuilder { void add_vector_of_weak_references(flatbuffers::Offset> vector_of_weak_references) { fbb_.AddOffset(Monster::VT_VECTOR_OF_WEAK_REFERENCES, vector_of_weak_references); } + void add_vector_of_strong_referrables(flatbuffers::Offset>> vector_of_strong_referrables) { + fbb_.AddOffset(Monster::VT_VECTOR_OF_STRONG_REFERRABLES, vector_of_strong_referrables); + } + void add_co_owning_reference(uint64_t co_owning_reference) { + fbb_.AddElement(Monster::VT_CO_OWNING_REFERENCE, co_owning_reference, 0); + } + void add_vector_of_co_owning_references(flatbuffers::Offset> vector_of_co_owning_references) { + fbb_.AddOffset(Monster::VT_VECTOR_OF_CO_OWNING_REFERENCES, vector_of_co_owning_references); + } + void add_non_owning_reference(uint64_t non_owning_reference) { + fbb_.AddElement(Monster::VT_NON_OWNING_REFERENCE, non_owning_reference, 0); + } + void add_vector_of_non_owning_references(flatbuffers::Offset> vector_of_non_owning_references) { + fbb_.AddOffset(Monster::VT_VECTOR_OF_NON_OWNING_REFERENCES, vector_of_non_owning_references); + } explicit MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); @@ -1273,13 +1344,23 @@ inline flatbuffers::Offset CreateMonster( flatbuffers::Offset parent_namespace_test = 0, flatbuffers::Offset>> vector_of_referrables = 0, uint64_t single_weak_reference = 0, - flatbuffers::Offset> vector_of_weak_references = 0) { + flatbuffers::Offset> vector_of_weak_references = 0, + flatbuffers::Offset>> vector_of_strong_referrables = 0, + uint64_t co_owning_reference = 0, + flatbuffers::Offset> vector_of_co_owning_references = 0, + uint64_t non_owning_reference = 0, + flatbuffers::Offset> vector_of_non_owning_references = 0) { MonsterBuilder builder_(_fbb); + builder_.add_non_owning_reference(non_owning_reference); + builder_.add_co_owning_reference(co_owning_reference); builder_.add_single_weak_reference(single_weak_reference); builder_.add_testhashu64_fnv1a(testhashu64_fnv1a); builder_.add_testhashs64_fnv1a(testhashs64_fnv1a); builder_.add_testhashu64_fnv1(testhashu64_fnv1); builder_.add_testhashs64_fnv1(testhashs64_fnv1); + builder_.add_vector_of_non_owning_references(vector_of_non_owning_references); + builder_.add_vector_of_co_owning_references(vector_of_co_owning_references); + builder_.add_vector_of_strong_referrables(vector_of_strong_referrables); builder_.add_vector_of_weak_references(vector_of_weak_references); builder_.add_vector_of_referrables(vector_of_referrables); builder_.add_parent_namespace_test(parent_namespace_test); @@ -1353,7 +1434,12 @@ inline flatbuffers::Offset CreateMonsterDirect( flatbuffers::Offset parent_namespace_test = 0, const std::vector> *vector_of_referrables = nullptr, uint64_t single_weak_reference = 0, - const std::vector *vector_of_weak_references = nullptr) { + const std::vector *vector_of_weak_references = nullptr, + const std::vector> *vector_of_strong_referrables = nullptr, + uint64_t co_owning_reference = 0, + const std::vector *vector_of_co_owning_references = nullptr, + uint64_t non_owning_reference = 0, + const std::vector *vector_of_non_owning_references = nullptr) { return MyGame::Example::CreateMonster( _fbb, pos, @@ -1392,7 +1478,12 @@ inline flatbuffers::Offset CreateMonsterDirect( parent_namespace_test, vector_of_referrables ? _fbb.CreateVector>(*vector_of_referrables) : 0, single_weak_reference, - vector_of_weak_references ? _fbb.CreateVector(*vector_of_weak_references) : 0); + vector_of_weak_references ? _fbb.CreateVector(*vector_of_weak_references) : 0, + vector_of_strong_referrables ? _fbb.CreateVector>(*vector_of_strong_referrables) : 0, + co_owning_reference, + vector_of_co_owning_references ? _fbb.CreateVector(*vector_of_co_owning_references) : 0, + non_owning_reference, + vector_of_non_owning_references ? _fbb.CreateVector(*vector_of_non_owning_references) : 0); } flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); @@ -1819,7 +1910,8 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function { auto _e = testhashs64_fnv1(); _o->testhashs64_fnv1 = _e; }; { auto _e = testhashu64_fnv1(); _o->testhashu64_fnv1 = _e; }; { auto _e = testhashs32_fnv1a(); _o->testhashs32_fnv1a = _e; }; - { auto _e = testhashu32_fnv1a(); if (_resolver) (*_resolver)(reinterpret_cast(&_o->testhashu32_fnv1a), static_cast(_e)); else _o->testhashu32_fnv1a = nullptr; }; + { auto _e = testhashu32_fnv1a(); //scalar resolver, naked +if (_resolver) (*_resolver)(reinterpret_cast(&_o->testhashu32_fnv1a), static_cast(_e)); else _o->testhashu32_fnv1a = nullptr; }; { auto _e = testhashs64_fnv1a(); _o->testhashs64_fnv1a = _e; }; { auto _e = testhashu64_fnv1a(); _o->testhashu64_fnv1a = _e; }; { 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; } } }; @@ -1834,8 +1926,19 @@ inline void Monster::UnPackTo(MonsterT *_o, const flatbuffers::resolver_function { 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); } } }; { auto _e = parent_namespace_test(); if (_e) _o->parent_namespace_test = flatbuffers::unique_ptr(_e->UnPack(_resolver)); }; { 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] = flatbuffers::unique_ptr(_e->Get(_i)->UnPack(_resolver)); } } }; - { auto _e = single_weak_reference(); if (_resolver) (*_resolver)(reinterpret_cast(&_o->single_weak_reference), static_cast(_e)); else _o->single_weak_reference = nullptr; }; - { 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++) { if (_resolver) (*_resolver)(reinterpret_cast(&_o->vector_of_weak_references[_i]), static_cast(_e->Get(_i))); else _o->vector_of_weak_references[_i] = nullptr; } } }; + { auto _e = single_weak_reference(); //scalar resolver, naked +if (_resolver) (*_resolver)(reinterpret_cast(&_o->single_weak_reference), static_cast(_e)); else _o->single_weak_reference = nullptr; }; + { 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 +if (_resolver) (*_resolver)(reinterpret_cast(&_o->vector_of_weak_references[_i]), static_cast(_e->Get(_i))); else _o->vector_of_weak_references[_i] = nullptr; } } }; + { 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(_e->Get(_i)->UnPack(_resolver)); } } }; + { auto _e = co_owning_reference(); //scalar resolver, naked +if (_resolver) (*_resolver)(reinterpret_cast(&_o->co_owning_reference), static_cast(_e)); else _o->co_owning_reference = nullptr; }; + { 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, std::unique_ptr +if (_resolver) (*_resolver)(reinterpret_cast(&_o->vector_of_co_owning_references[_i]), static_cast(_e->Get(_i)));/* else do nothing */; } } }; + { auto _e = non_owning_reference(); //scalar resolver, naked +if (_resolver) (*_resolver)(reinterpret_cast(&_o->non_owning_reference), static_cast(_e)); else _o->non_owning_reference = nullptr; }; + { 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 +if (_resolver) (*_resolver)(reinterpret_cast(&_o->vector_of_non_owning_references[_i]), static_cast(_e->Get(_i))); else _o->vector_of_non_owning_references[_i] = nullptr; } } }; } inline flatbuffers::Offset Monster::Pack(flatbuffers::FlatBufferBuilder &_fbb, const MonsterT* _o, const flatbuffers::rehasher_function_t *_rehasher) { @@ -1883,6 +1986,11 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder auto _vector_of_referrables = _o->vector_of_referrables.size() ? _fbb.CreateVector> (_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; auto _single_weak_reference = _rehasher ? static_cast((*_rehasher)(_o->single_weak_reference)) : 0; auto _vector_of_weak_references = _o->vector_of_weak_references.size() ? _fbb.CreateVector(_o->vector_of_weak_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast((*__va->__rehasher)(__va->__o->vector_of_weak_references[i])) : 0; }, &_va ) : 0; + auto _vector_of_strong_referrables = _o->vector_of_strong_referrables.size() ? _fbb.CreateVector> (_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; + auto _co_owning_reference = _rehasher ? static_cast((*_rehasher)(_o->co_owning_reference)) : 0; + auto _vector_of_co_owning_references = _o->vector_of_co_owning_references.size() ? _fbb.CreateVector(_o->vector_of_co_owning_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast((*__va->__rehasher)(__va->__o->vector_of_co_owning_references[i].get())) : 0; }, &_va ) : 0; + auto _non_owning_reference = _rehasher ? static_cast((*_rehasher)(_o->non_owning_reference)) : 0; + auto _vector_of_non_owning_references = _o->vector_of_non_owning_references.size() ? _fbb.CreateVector(_o->vector_of_non_owning_references.size(), [](size_t i, _VectorArgs *__va) { return __va->__rehasher ? static_cast((*__va->__rehasher)(__va->__o->vector_of_non_owning_references[i])) : 0; }, &_va ) : 0; return MyGame::Example::CreateMonster( _fbb, _pos, @@ -1921,7 +2029,12 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder _parent_namespace_test, _vector_of_referrables, _single_weak_reference, - _vector_of_weak_references); + _vector_of_weak_references, + _vector_of_strong_referrables, + _co_owning_reference, + _vector_of_co_owning_references, + _non_owning_reference, + _vector_of_non_owning_references); } inline TypeAliasesT *TypeAliases::UnPack(const flatbuffers::resolver_function_t *_resolver) const { @@ -2094,34 +2207,6 @@ inline void AnyUnion::Reset() { type = Any_NONE; } -} // namespace Example - -inline flatbuffers::TypeTable *InParentNamespaceTypeTable(); - -namespace Example2 { - -inline flatbuffers::TypeTable *MonsterTypeTable(); - -} // namespace Example2 - -namespace Example { - -inline flatbuffers::TypeTable *TestTypeTable(); - -inline flatbuffers::TypeTable *TestSimpleTableWithEnumTypeTable(); - -inline flatbuffers::TypeTable *Vec3TypeTable(); - -inline flatbuffers::TypeTable *AbilityTypeTable(); - -inline flatbuffers::TypeTable *StatTypeTable(); - -inline flatbuffers::TypeTable *ReferrableTypeTable(); - -inline flatbuffers::TypeTable *MonsterTypeTable(); - -inline flatbuffers::TypeTable *TypeAliasesTypeTable(); - inline flatbuffers::TypeTable *ColorTypeTable() { static flatbuffers::TypeCode type_codes[] = { { flatbuffers::ET_CHAR, 0, 0 }, @@ -2334,6 +2419,11 @@ inline flatbuffers::TypeTable *MonsterTypeTable() { { flatbuffers::ET_SEQUENCE, 0, 7 }, { flatbuffers::ET_SEQUENCE, 1, 8 }, { flatbuffers::ET_ULONG, 0, -1 }, + { flatbuffers::ET_ULONG, 1, -1 }, + { flatbuffers::ET_SEQUENCE, 1, 8 }, + { flatbuffers::ET_ULONG, 0, -1 }, + { flatbuffers::ET_ULONG, 1, -1 }, + { flatbuffers::ET_ULONG, 0, -1 }, { flatbuffers::ET_ULONG, 1, -1 } }; static flatbuffers::TypeFunction type_refs[] = { @@ -2385,10 +2475,15 @@ inline flatbuffers::TypeTable *MonsterTypeTable() { "parent_namespace_test", "vector_of_referrables", "single_weak_reference", - "vector_of_weak_references" + "vector_of_weak_references", + "vector_of_strong_referrables", + "co_owning_reference", + "vector_of_co_owning_references", + "non_owning_reference", + "vector_of_non_owning_references" }; static flatbuffers::TypeTable tt = { - flatbuffers::ST_TABLE, 38, type_codes, type_refs, nullptr, names + flatbuffers::ST_TABLE, 43, type_codes, type_refs, nullptr, names }; return &tt; } diff --git a/tests/monster_test_generated.js b/tests/monster_test_generated.js index 774490b16..11152e77c 100644 --- a/tests/monster_test_generated.js +++ b/tests/monster_test_generated.js @@ -1556,11 +1556,109 @@ MyGame.Example.Monster.prototype.vectorOfWeakReferencesLength = function() { return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0; }; +/** + * @param {number} index + * @param {MyGame.Example.Referrable=} obj + * @returns {MyGame.Example.Referrable} + */ +MyGame.Example.Monster.prototype.vectorOfStrongReferrables = function(index, obj) { + var offset = this.bb.__offset(this.bb_pos, 80); + return offset ? (obj || new MyGame.Example.Referrable).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos + offset) + index * 4), this.bb) : null; +}; + +/** + * @returns {number} + */ +MyGame.Example.Monster.prototype.vectorOfStrongReferrablesLength = function() { + var offset = this.bb.__offset(this.bb_pos, 80); + return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {flatbuffers.Long} + */ +MyGame.Example.Monster.prototype.coOwningReference = function() { + var offset = this.bb.__offset(this.bb_pos, 82); + return offset ? this.bb.readUint64(this.bb_pos + offset) : this.bb.createLong(0, 0); +}; + +/** + * @param {flatbuffers.Long} value + * @returns {boolean} + */ +MyGame.Example.Monster.prototype.mutate_co_owning_reference = function(value) { + var offset = this.bb.__offset(this.bb_pos, 82); + + if (offset === 0) { + return false; + } + + this.bb.writeUint64(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {number} index + * @returns {flatbuffers.Long} + */ +MyGame.Example.Monster.prototype.vectorOfCoOwningReferences = function(index) { + var offset = this.bb.__offset(this.bb_pos, 84); + return offset ? this.bb.readUint64(this.bb.__vector(this.bb_pos + offset) + index * 8) : this.bb.createLong(0, 0); +}; + +/** + * @returns {number} + */ +MyGame.Example.Monster.prototype.vectorOfCoOwningReferencesLength = function() { + var offset = this.bb.__offset(this.bb_pos, 84); + return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {flatbuffers.Long} + */ +MyGame.Example.Monster.prototype.nonOwningReference = function() { + var offset = this.bb.__offset(this.bb_pos, 86); + return offset ? this.bb.readUint64(this.bb_pos + offset) : this.bb.createLong(0, 0); +}; + +/** + * @param {flatbuffers.Long} value + * @returns {boolean} + */ +MyGame.Example.Monster.prototype.mutate_non_owning_reference = function(value) { + var offset = this.bb.__offset(this.bb_pos, 86); + + if (offset === 0) { + return false; + } + + this.bb.writeUint64(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {number} index + * @returns {flatbuffers.Long} + */ +MyGame.Example.Monster.prototype.vectorOfNonOwningReferences = function(index) { + var offset = this.bb.__offset(this.bb_pos, 88); + return offset ? this.bb.readUint64(this.bb.__vector(this.bb_pos + offset) + index * 8) : this.bb.createLong(0, 0); +}; + +/** + * @returns {number} + */ +MyGame.Example.Monster.prototype.vectorOfNonOwningReferencesLength = function() { + var offset = this.bb.__offset(this.bb_pos, 88); + return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0; +}; + /** * @param {flatbuffers.Builder} builder */ MyGame.Example.Monster.startMonster = function(builder) { - builder.startObject(38); + builder.startObject(43); }; /** @@ -2114,6 +2212,109 @@ MyGame.Example.Monster.startVectorOfWeakReferencesVector = function(builder, num builder.startVector(8, numElems, 8); }; +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} vectorOfStrongReferrablesOffset + */ +MyGame.Example.Monster.addVectorOfStrongReferrables = function(builder, vectorOfStrongReferrablesOffset) { + builder.addFieldOffset(38, vectorOfStrongReferrablesOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.} data + * @returns {flatbuffers.Offset} + */ +MyGame.Example.Monster.createVectorOfStrongReferrablesVector = function(builder, data) { + builder.startVector(4, data.length, 4); + for (var i = data.length - 1; i >= 0; i--) { + builder.addOffset(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +MyGame.Example.Monster.startVectorOfStrongReferrablesVector = function(builder, numElems) { + builder.startVector(4, numElems, 4); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Long} coOwningReference + */ +MyGame.Example.Monster.addCoOwningReference = function(builder, coOwningReference) { + builder.addFieldInt64(39, coOwningReference, builder.createLong(0, 0)); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} vectorOfCoOwningReferencesOffset + */ +MyGame.Example.Monster.addVectorOfCoOwningReferences = function(builder, vectorOfCoOwningReferencesOffset) { + builder.addFieldOffset(40, vectorOfCoOwningReferencesOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.} data + * @returns {flatbuffers.Offset} + */ +MyGame.Example.Monster.createVectorOfCoOwningReferencesVector = function(builder, data) { + builder.startVector(8, data.length, 8); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt64(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +MyGame.Example.Monster.startVectorOfCoOwningReferencesVector = function(builder, numElems) { + builder.startVector(8, numElems, 8); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Long} nonOwningReference + */ +MyGame.Example.Monster.addNonOwningReference = function(builder, nonOwningReference) { + builder.addFieldInt64(41, nonOwningReference, builder.createLong(0, 0)); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} vectorOfNonOwningReferencesOffset + */ +MyGame.Example.Monster.addVectorOfNonOwningReferences = function(builder, vectorOfNonOwningReferencesOffset) { + builder.addFieldOffset(42, vectorOfNonOwningReferencesOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.} data + * @returns {flatbuffers.Offset} + */ +MyGame.Example.Monster.createVectorOfNonOwningReferencesVector = function(builder, data) { + builder.startVector(8, data.length, 8); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt64(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +MyGame.Example.Monster.startVectorOfNonOwningReferencesVector = function(builder, numElems) { + builder.startVector(8, numElems, 8); +}; + /** * @param {flatbuffers.Builder} builder * @returns {flatbuffers.Offset} diff --git a/tests/monster_test_generated.ts b/tests/monster_test_generated.ts index ed7271d29..c54f53955 100644 --- a/tests/monster_test_generated.ts +++ b/tests/monster_test_generated.ts @@ -1549,11 +1549,109 @@ vectorOfWeakReferencesLength():number { return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; }; +/** + * @param {number} index + * @param {MyGame.Example.Referrable=} obj + * @returns {MyGame.Example.Referrable} + */ +vectorOfStrongReferrables(index: number, obj?:MyGame.Example.Referrable):MyGame.Example.Referrable|null { + var offset = this.bb!.__offset(this.bb_pos, 80); + return offset ? (obj || new MyGame.Example.Referrable).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null; +}; + +/** + * @returns {number} + */ +vectorOfStrongReferrablesLength():number { + var offset = this.bb!.__offset(this.bb_pos, 80); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {flatbuffers.Long} + */ +coOwningReference():flatbuffers.Long { + var offset = this.bb!.__offset(this.bb_pos, 82); + return offset ? this.bb!.readUint64(this.bb_pos + offset) : this.bb!.createLong(0, 0); +}; + +/** + * @param {flatbuffers.Long} value + * @returns {boolean} + */ +mutate_co_owning_reference(value:flatbuffers.Long):boolean { + var offset = this.bb!.__offset(this.bb_pos, 82); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint64(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {number} index + * @returns {flatbuffers.Long} + */ +vectorOfCoOwningReferences(index: number):flatbuffers.Long|null { + var offset = this.bb!.__offset(this.bb_pos, 84); + return offset ? this.bb!.readUint64(this.bb!.__vector(this.bb_pos + offset) + index * 8) : this.bb!.createLong(0, 0); +}; + +/** + * @returns {number} + */ +vectorOfCoOwningReferencesLength():number { + var offset = this.bb!.__offset(this.bb_pos, 84); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + +/** + * @returns {flatbuffers.Long} + */ +nonOwningReference():flatbuffers.Long { + var offset = this.bb!.__offset(this.bb_pos, 86); + return offset ? this.bb!.readUint64(this.bb_pos + offset) : this.bb!.createLong(0, 0); +}; + +/** + * @param {flatbuffers.Long} value + * @returns {boolean} + */ +mutate_non_owning_reference(value:flatbuffers.Long):boolean { + var offset = this.bb!.__offset(this.bb_pos, 86); + + if (offset === 0) { + return false; + } + + this.bb!.writeUint64(this.bb_pos + offset, value); + return true; +}; + +/** + * @param {number} index + * @returns {flatbuffers.Long} + */ +vectorOfNonOwningReferences(index: number):flatbuffers.Long|null { + var offset = this.bb!.__offset(this.bb_pos, 88); + return offset ? this.bb!.readUint64(this.bb!.__vector(this.bb_pos + offset) + index * 8) : this.bb!.createLong(0, 0); +}; + +/** + * @returns {number} + */ +vectorOfNonOwningReferencesLength():number { + var offset = this.bb!.__offset(this.bb_pos, 88); + return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; +}; + /** * @param {flatbuffers.Builder} builder */ static startMonster(builder:flatbuffers.Builder) { - builder.startObject(38); + builder.startObject(43); }; /** @@ -2107,6 +2205,109 @@ static startVectorOfWeakReferencesVector(builder:flatbuffers.Builder, numElems:n builder.startVector(8, numElems, 8); }; +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} vectorOfStrongReferrablesOffset + */ +static addVectorOfStrongReferrables(builder:flatbuffers.Builder, vectorOfStrongReferrablesOffset:flatbuffers.Offset) { + builder.addFieldOffset(38, vectorOfStrongReferrablesOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.} data + * @returns {flatbuffers.Offset} + */ +static createVectorOfStrongReferrablesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset { + builder.startVector(4, data.length, 4); + for (var i = data.length - 1; i >= 0; i--) { + builder.addOffset(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startVectorOfStrongReferrablesVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(4, numElems, 4); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Long} coOwningReference + */ +static addCoOwningReference(builder:flatbuffers.Builder, coOwningReference:flatbuffers.Long) { + builder.addFieldInt64(39, coOwningReference, builder.createLong(0, 0)); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} vectorOfCoOwningReferencesOffset + */ +static addVectorOfCoOwningReferences(builder:flatbuffers.Builder, vectorOfCoOwningReferencesOffset:flatbuffers.Offset) { + builder.addFieldOffset(40, vectorOfCoOwningReferencesOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.} data + * @returns {flatbuffers.Offset} + */ +static createVectorOfCoOwningReferencesVector(builder:flatbuffers.Builder, data:flatbuffers.Long[]):flatbuffers.Offset { + builder.startVector(8, data.length, 8); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt64(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startVectorOfCoOwningReferencesVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(8, numElems, 8); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Long} nonOwningReference + */ +static addNonOwningReference(builder:flatbuffers.Builder, nonOwningReference:flatbuffers.Long) { + builder.addFieldInt64(41, nonOwningReference, builder.createLong(0, 0)); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {flatbuffers.Offset} vectorOfNonOwningReferencesOffset + */ +static addVectorOfNonOwningReferences(builder:flatbuffers.Builder, vectorOfNonOwningReferencesOffset:flatbuffers.Offset) { + builder.addFieldOffset(42, vectorOfNonOwningReferencesOffset, 0); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {Array.} data + * @returns {flatbuffers.Offset} + */ +static createVectorOfNonOwningReferencesVector(builder:flatbuffers.Builder, data:flatbuffers.Long[]):flatbuffers.Offset { + builder.startVector(8, data.length, 8); + for (var i = data.length - 1; i >= 0; i--) { + builder.addInt64(data[i]); + } + return builder.endVector(); +}; + +/** + * @param {flatbuffers.Builder} builder + * @param {number} numElems + */ +static startVectorOfNonOwningReferencesVector(builder:flatbuffers.Builder, numElems:number) { + builder.startVector(8, numElems, 8); +}; + /** * @param {flatbuffers.Builder} builder * @returns {flatbuffers.Offset} diff --git a/tests/namespace_test/namespace_test2_generated.ts b/tests/namespace_test/namespace_test2_generated.ts index 18f1d6e87..aa623a879 100644 --- a/tests/namespace_test/namespace_test2_generated.ts +++ b/tests/namespace_test/namespace_test2_generated.ts @@ -1,6 +1,6 @@ // automatically generated by the FlatBuffers compiler, do not modify -import * as NS9459827973991502386 from "./namespace_test1_generated"; +import * as NS4989953370203581498 from "./namespace_test1_generated"; /** * @constructor */ @@ -39,24 +39,24 @@ static getRootAsTableInFirstNS(bb:flatbuffers.ByteBuffer, obj?:TableInFirstNS):T * @param {NamespaceA.NamespaceB.TableInNestedNS=} obj * @returns {NamespaceA.NamespaceB.TableInNestedNS|null} */ -fooTable(obj?:NS9459827973991502386.NamespaceA.NamespaceB.TableInNestedNS):NS9459827973991502386.NamespaceA.NamespaceB.TableInNestedNS|null { +fooTable(obj?:NS4989953370203581498.NamespaceA.NamespaceB.TableInNestedNS):NS4989953370203581498.NamespaceA.NamespaceB.TableInNestedNS|null { var offset = this.bb!.__offset(this.bb_pos, 4); - return offset ? (obj || new NS9459827973991502386.NamespaceA.NamespaceB.TableInNestedNS).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null; + return offset ? (obj || new NS4989953370203581498.NamespaceA.NamespaceB.TableInNestedNS).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null; }; /** * @returns {NamespaceA.NamespaceB.EnumInNestedNS} */ -fooEnum():NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS { +fooEnum():NS4989953370203581498.NamespaceA.NamespaceB.EnumInNestedNS { var offset = this.bb!.__offset(this.bb_pos, 6); - return offset ? /** @type {NamespaceA.NamespaceB.EnumInNestedNS} */ (this.bb!.readInt8(this.bb_pos + offset)) : NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS.A; + return offset ? /** @type {NamespaceA.NamespaceB.EnumInNestedNS} */ (this.bb!.readInt8(this.bb_pos + offset)) : NS4989953370203581498.NamespaceA.NamespaceB.EnumInNestedNS.A; }; /** * @param {NamespaceA.NamespaceB.EnumInNestedNS} value * @returns {boolean} */ -mutate_foo_enum(value:NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS):boolean { +mutate_foo_enum(value:NS4989953370203581498.NamespaceA.NamespaceB.EnumInNestedNS):boolean { var offset = this.bb!.__offset(this.bb_pos, 6); if (offset === 0) { @@ -71,9 +71,9 @@ mutate_foo_enum(value:NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS * @param {NamespaceA.NamespaceB.StructInNestedNS=} obj * @returns {NamespaceA.NamespaceB.StructInNestedNS|null} */ -fooStruct(obj?:NS9459827973991502386.NamespaceA.NamespaceB.StructInNestedNS):NS9459827973991502386.NamespaceA.NamespaceB.StructInNestedNS|null { +fooStruct(obj?:NS4989953370203581498.NamespaceA.NamespaceB.StructInNestedNS):NS4989953370203581498.NamespaceA.NamespaceB.StructInNestedNS|null { var offset = this.bb!.__offset(this.bb_pos, 8); - return offset ? (obj || new NS9459827973991502386.NamespaceA.NamespaceB.StructInNestedNS).__init(this.bb_pos + offset, this.bb!) : null; + return offset ? (obj || new NS4989953370203581498.NamespaceA.NamespaceB.StructInNestedNS).__init(this.bb_pos + offset, this.bb!) : null; }; /** @@ -95,8 +95,8 @@ static addFooTable(builder:flatbuffers.Builder, fooTableOffset:flatbuffers.Offse * @param {flatbuffers.Builder} builder * @param {NamespaceA.NamespaceB.EnumInNestedNS} fooEnum */ -static addFooEnum(builder:flatbuffers.Builder, fooEnum:NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS) { - builder.addFieldInt8(1, fooEnum, NS9459827973991502386.NamespaceA.NamespaceB.EnumInNestedNS.A); +static addFooEnum(builder:flatbuffers.Builder, fooEnum:NS4989953370203581498.NamespaceA.NamespaceB.EnumInNestedNS) { + builder.addFieldInt8(1, fooEnum, NS4989953370203581498.NamespaceA.NamespaceB.EnumInNestedNS.A); }; /** diff --git a/tests/test.cpp b/tests/test.cpp index 2da79f195..2f0401244 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -20,6 +20,15 @@ #include "flatbuffers/registry.h" #include "flatbuffers/util.h" +// clang-format off +#ifdef FLATBUFFERS_CPP98_STL + #include "flatbuffers/stl_emulation.h" + namespace std { + using flatbuffers::unique_ptr; + } +#endif +// clang-format on + #include "monster_test_generated.h" #include "namespace_test/namespace_test1_generated.h" #include "namespace_test/namespace_test2_generated.h"