[Go] Add UnPackTo functions (#5598)
authorLawrence Chan <llchan@users.noreply.github.com>
Mon, 4 Nov 2019 20:12:25 +0000 (14:12 -0600)
committerWouter van Oortmerssen <aardappel@gmail.com>
Mon, 4 Nov 2019 20:12:25 +0000 (12:12 -0800)
src/idl_gen_go.cpp
tests/MyGame/Example/Ability.go
tests/MyGame/Example/Monster.go
tests/MyGame/Example/Referrable.go
tests/MyGame/Example/Stat.go
tests/MyGame/Example/Test.go
tests/MyGame/Example/TestSimpleTableWithEnum.go
tests/MyGame/Example/TypeAliases.go
tests/MyGame/Example/Vec3.go
tests/MyGame/Example2/Monster.go
tests/MyGame/InParentNamespace.go

index b092e5e..aa25751 100644 (file)
@@ -983,10 +983,8 @@ class GoGenerator : public BaseGenerator {
     const StructDef &struct_def, std::string *code_ptr) {
     std::string &code = *code_ptr;
 
-    code += "func (rcv *" + struct_def.name + ") UnPack() *" +
-            NativeName(struct_def) + " {\n";
-    code += "\tif rcv == nil { return nil }\n";
-    code += "\tt := &" + NativeName(struct_def) + "{}\n";
+    code += "func (rcv *" + struct_def.name + ") UnPackTo(t *" +
+            NativeName(struct_def) + ") {\n";
     for (auto it = struct_def.fields.vec.begin();
          it != struct_def.fields.vec.end(); ++it) {
       const FieldDef &field = **it;
@@ -1046,6 +1044,13 @@ class GoGenerator : public BaseGenerator {
         FLATBUFFERS_ASSERT(0);
       }
     }
+    code += "}\n\n";
+
+    code += "func (rcv *" + struct_def.name + ") UnPack() *" +
+            NativeName(struct_def) + " {\n";
+    code += "\tif rcv == nil { return nil }\n";
+    code += "\tt := &" + NativeName(struct_def) + "{}\n";
+    code += "\trcv.UnPackTo(t)\n";
     code += "\treturn t\n";
     code += "}\n\n";
   }
@@ -1083,10 +1088,8 @@ class GoGenerator : public BaseGenerator {
     const StructDef &struct_def, std::string *code_ptr) {
     std::string &code = *code_ptr;
 
-    code += "func (rcv *" + struct_def.name + ") UnPack() *" +
-            NativeName(struct_def) + " {\n";
-    code += "\tif rcv == nil { return nil }\n";
-    code += "\tt := &" + NativeName(struct_def) + "{}\n";
+    code += "func (rcv *" + struct_def.name + ") UnPackTo(t *" +
+            NativeName(struct_def) + ") {\n";
     for (auto it = struct_def.fields.vec.begin();
          it != struct_def.fields.vec.end(); ++it) {
       const FieldDef &field = **it;
@@ -1098,6 +1101,13 @@ class GoGenerator : public BaseGenerator {
                 MakeCamel(field.name) + "()\n";
       }
     }
+    code += "}\n\n";
+
+    code += "func (rcv *" + struct_def.name + ") UnPack() *" +
+            NativeName(struct_def) + " {\n";
+    code += "\tif rcv == nil { return nil }\n";
+    code += "\tt := &" + NativeName(struct_def) + "{}\n";
+    code += "\trcv.UnPackTo(t)\n";
     code += "\treturn t\n";
     code += "}\n\n";
   }
index 12ff1e5..eefb613 100644 (file)
@@ -15,11 +15,15 @@ func AbilityPack(builder *flatbuffers.Builder, t *AbilityT) flatbuffers.UOffsetT
        if t == nil { return 0 }
        return CreateAbility(builder, t.Id, t.Distance)
 }
+func (rcv *Ability) UnPackTo(t *AbilityT) {
+       t.Id = rcv.Id()
+       t.Distance = rcv.Distance()
+}
+
 func (rcv *Ability) UnPack() *AbilityT {
        if rcv == nil { return nil }
        t := &AbilityT{}
-       t.Id = rcv.Id()
-       t.Distance = rcv.Distance()
+       rcv.UnPackTo(t)
        return t
 }
 
index 32be49f..357b951 100644 (file)
@@ -295,9 +295,7 @@ func MonsterPack(builder *flatbuffers.Builder, t *MonsterT) flatbuffers.UOffsetT
        return MonsterEnd(builder)
 }
 
-func (rcv *Monster) UnPack() *MonsterT {
-       if rcv == nil { return nil }
-       t := &MonsterT{}
+func (rcv *Monster) UnPackTo(t *MonsterT) {
        t.Pos = rcv.Pos(nil).UnPack()
        t.Mana = rcv.Mana()
        t.Hp = rcv.Hp()
@@ -424,6 +422,12 @@ func (rcv *Monster) UnPack() *MonsterT {
                t.VectorOfEnums[j] = rcv.VectorOfEnums(j)
        }
        t.SignedEnum = rcv.SignedEnum()
+}
+
+func (rcv *Monster) UnPack() *MonsterT {
+       if rcv == nil { return nil }
+       t := &MonsterT{}
+       rcv.UnPackTo(t)
        return t
 }
 
index c2eb784..d05f690 100644 (file)
@@ -17,10 +17,14 @@ func ReferrablePack(builder *flatbuffers.Builder, t *ReferrableT) flatbuffers.UO
        return ReferrableEnd(builder)
 }
 
+func (rcv *Referrable) UnPackTo(t *ReferrableT) {
+       t.Id = rcv.Id()
+}
+
 func (rcv *Referrable) UnPack() *ReferrableT {
        if rcv == nil { return nil }
        t := &ReferrableT{}
-       t.Id = rcv.Id()
+       rcv.UnPackTo(t)
        return t
 }
 
index 64ece1f..9d052d8 100644 (file)
@@ -22,12 +22,16 @@ func StatPack(builder *flatbuffers.Builder, t *StatT) flatbuffers.UOffsetT {
        return StatEnd(builder)
 }
 
-func (rcv *Stat) UnPack() *StatT {
-       if rcv == nil { return nil }
-       t := &StatT{}
+func (rcv *Stat) UnPackTo(t *StatT) {
        t.Id = string(rcv.Id())
        t.Val = rcv.Val()
        t.Count = rcv.Count()
+}
+
+func (rcv *Stat) UnPack() *StatT {
+       if rcv == nil { return nil }
+       t := &StatT{}
+       rcv.UnPackTo(t)
        return t
 }
 
index 31110d9..4f66d44 100644 (file)
@@ -15,11 +15,15 @@ func TestPack(builder *flatbuffers.Builder, t *TestT) flatbuffers.UOffsetT {
        if t == nil { return 0 }
        return CreateTest(builder, t.A, t.B)
 }
+func (rcv *Test) UnPackTo(t *TestT) {
+       t.A = rcv.A()
+       t.B = rcv.B()
+}
+
 func (rcv *Test) UnPack() *TestT {
        if rcv == nil { return nil }
        t := &TestT{}
-       t.A = rcv.A()
-       t.B = rcv.B()
+       rcv.UnPackTo(t)
        return t
 }
 
index 7af1edb..81cda1a 100644 (file)
@@ -17,10 +17,14 @@ func TestSimpleTableWithEnumPack(builder *flatbuffers.Builder, t *TestSimpleTabl
        return TestSimpleTableWithEnumEnd(builder)
 }
 
+func (rcv *TestSimpleTableWithEnum) UnPackTo(t *TestSimpleTableWithEnumT) {
+       t.Color = rcv.Color()
+}
+
 func (rcv *TestSimpleTableWithEnum) UnPack() *TestSimpleTableWithEnumT {
        if rcv == nil { return nil }
        t := &TestSimpleTableWithEnumT{}
-       t.Color = rcv.Color()
+       rcv.UnPackTo(t)
        return t
 }
 
index 497d574..0a6b73f 100644 (file)
@@ -57,9 +57,7 @@ func TypeAliasesPack(builder *flatbuffers.Builder, t *TypeAliasesT) flatbuffers.
        return TypeAliasesEnd(builder)
 }
 
-func (rcv *TypeAliases) UnPack() *TypeAliasesT {
-       if rcv == nil { return nil }
-       t := &TypeAliasesT{}
+func (rcv *TypeAliases) UnPackTo(t *TypeAliasesT) {
        t.I8 = rcv.I8()
        t.U8 = rcv.U8()
        t.I16 = rcv.I16()
@@ -80,6 +78,12 @@ func (rcv *TypeAliases) UnPack() *TypeAliasesT {
        for j := 0; j < vf64Length; j++ {
                t.Vf64[j] = rcv.Vf64(j)
        }
+}
+
+func (rcv *TypeAliases) UnPack() *TypeAliasesT {
+       if rcv == nil { return nil }
+       t := &TypeAliasesT{}
+       rcv.UnPackTo(t)
        return t
 }
 
index 3a75c88..0f081d0 100644 (file)
@@ -19,15 +19,19 @@ func Vec3Pack(builder *flatbuffers.Builder, t *Vec3T) flatbuffers.UOffsetT {
        if t == nil { return 0 }
        return CreateVec3(builder, t.X, t.Y, t.Z, t.Test1, t.Test2, t.Test3.A, t.Test3.B)
 }
-func (rcv *Vec3) UnPack() *Vec3T {
-       if rcv == nil { return nil }
-       t := &Vec3T{}
+func (rcv *Vec3) UnPackTo(t *Vec3T) {
        t.X = rcv.X()
        t.Y = rcv.Y()
        t.Z = rcv.Z()
        t.Test1 = rcv.Test1()
        t.Test2 = rcv.Test2()
        t.Test3 = rcv.Test3(nil).UnPack()
+}
+
+func (rcv *Vec3) UnPack() *Vec3T {
+       if rcv == nil { return nil }
+       t := &Vec3T{}
+       rcv.UnPackTo(t)
        return t
 }
 
index b329d43..c148b41 100644 (file)
@@ -15,9 +15,13 @@ func MonsterPack(builder *flatbuffers.Builder, t *MonsterT) flatbuffers.UOffsetT
        return MonsterEnd(builder)
 }
 
+func (rcv *Monster) UnPackTo(t *MonsterT) {
+}
+
 func (rcv *Monster) UnPack() *MonsterT {
        if rcv == nil { return nil }
        t := &MonsterT{}
+       rcv.UnPackTo(t)
        return t
 }
 
index 186666a..b8d1f7e 100644 (file)
@@ -15,9 +15,13 @@ func InParentNamespacePack(builder *flatbuffers.Builder, t *InParentNamespaceT)
        return InParentNamespaceEnd(builder)
 }
 
+func (rcv *InParentNamespace) UnPackTo(t *InParentNamespaceT) {
+}
+
 func (rcv *InParentNamespace) UnPack() *InParentNamespaceT {
        if rcv == nil { return nil }
        t := &InParentNamespaceT{}
+       rcv.UnPackTo(t)
        return t
 }