mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-30 13:20:00 +00:00
@@ -620,6 +620,27 @@ class GoGenerator : public BaseGenerator {
|
|||||||
code += "}\n\n";
|
code += "}\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mutate an element of a vector of scalars.
|
||||||
|
void MutateElementOfVectorOfNonStruct(const StructDef &struct_def,
|
||||||
|
const FieldDef &field,
|
||||||
|
std::string *code_ptr) {
|
||||||
|
std::string &code = *code_ptr;
|
||||||
|
auto vectortype = field.value.type.VectorType();
|
||||||
|
std::string type = MakeCamel(GenTypeBasic(vectortype));
|
||||||
|
std::string setter = "rcv._tab.Mutate" + type;
|
||||||
|
GenReceiver(struct_def, code_ptr);
|
||||||
|
code += " Mutate" + MakeCamel(field.name);
|
||||||
|
code += "(j int, n " + TypeName(field) + ") bool ";
|
||||||
|
code += OffsetPrefix(field);
|
||||||
|
code += "\t\ta := rcv._tab.Vector(o)\n";
|
||||||
|
code += "\t\treturn " + setter + "(";
|
||||||
|
code += "a+flatbuffers.UOffsetT(j*";
|
||||||
|
code += NumToString(InlineSize(vectortype)) + "), n)\n";
|
||||||
|
code += "\t}\n";
|
||||||
|
code += "\treturn false\n";
|
||||||
|
code += "}\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
// Generate a struct field setter, conditioned on its child type(s).
|
// Generate a struct field setter, conditioned on its child type(s).
|
||||||
void GenStructMutator(const StructDef &struct_def, const FieldDef &field,
|
void GenStructMutator(const StructDef &struct_def, const FieldDef &field,
|
||||||
std::string *code_ptr) {
|
std::string *code_ptr) {
|
||||||
@@ -630,6 +651,10 @@ class GoGenerator : public BaseGenerator {
|
|||||||
} else {
|
} else {
|
||||||
MutateScalarFieldOfTable(struct_def, field, code_ptr);
|
MutateScalarFieldOfTable(struct_def, field, code_ptr);
|
||||||
}
|
}
|
||||||
|
} else if (field.value.type.base_type == BASE_TYPE_VECTOR) {
|
||||||
|
if (IsScalar(field.value.type.element)) {
|
||||||
|
MutateElementOfVectorOfNonStruct(struct_def, field, code_ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -99,6 +99,15 @@ func (rcv *Monster) InventoryBytes() []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateInventory(j int, n byte) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(14))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateByte(a+flatbuffers.UOffsetT(j*1), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) Color() Color {
|
func (rcv *Monster) Color() Color {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(16))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(16))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -230,6 +239,15 @@ func (rcv *Monster) TestnestedflatbufferBytes() []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateTestnestedflatbuffer(j int, n byte) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(30))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateByte(a+flatbuffers.UOffsetT(j*1), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) Testempty(obj *Stat) *Stat {
|
func (rcv *Monster) Testempty(obj *Stat) *Stat {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(32))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(32))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -368,6 +386,15 @@ func (rcv *Monster) TestarrayofboolsLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateTestarrayofbools(j int, n bool) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(52))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateBool(a+flatbuffers.UOffsetT(j*1), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) Testf() float32 {
|
func (rcv *Monster) Testf() float32 {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(54))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(54))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -465,6 +492,15 @@ func (rcv *Monster) FlexBytes() []byte {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateFlex(j int, n byte) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(64))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateByte(a+flatbuffers.UOffsetT(j*1), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) Test5(obj *Test, j int) bool {
|
func (rcv *Monster) Test5(obj *Test, j int) bool {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(66))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(66))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -501,6 +537,15 @@ func (rcv *Monster) VectorOfLongsLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateVectorOfLongs(j int, n int64) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(68))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateInt64(a+flatbuffers.UOffsetT(j*8), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) VectorOfDoubles(j int) float64 {
|
func (rcv *Monster) VectorOfDoubles(j int) float64 {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(70))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(70))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -518,6 +563,15 @@ func (rcv *Monster) VectorOfDoublesLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateVectorOfDoubles(j int, n float64) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(70))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateFloat64(a+flatbuffers.UOffsetT(j*8), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) ParentNamespaceTest(obj *MyGame.InParentNamespace) *MyGame.InParentNamespace {
|
func (rcv *Monster) ParentNamespaceTest(obj *MyGame.InParentNamespace) *MyGame.InParentNamespace {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(72))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(72))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -580,6 +634,15 @@ func (rcv *Monster) VectorOfWeakReferencesLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateVectorOfWeakReferences(j int, n uint64) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(78))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateUint64(a+flatbuffers.UOffsetT(j*8), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) VectorOfStrongReferrables(obj *Referrable, j int) bool {
|
func (rcv *Monster) VectorOfStrongReferrables(obj *Referrable, j int) bool {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(80))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(80))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -629,6 +692,15 @@ func (rcv *Monster) VectorOfCoOwningReferencesLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateVectorOfCoOwningReferences(j int, n uint64) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(84))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateUint64(a+flatbuffers.UOffsetT(j*8), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) NonOwningReference() uint64 {
|
func (rcv *Monster) NonOwningReference() uint64 {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(86))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(86))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -658,6 +730,15 @@ func (rcv *Monster) VectorOfNonOwningReferencesLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateVectorOfNonOwningReferences(j int, n uint64) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(88))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateUint64(a+flatbuffers.UOffsetT(j*8), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *Monster) AnyUniqueType() byte {
|
func (rcv *Monster) AnyUniqueType() byte {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(90))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(90))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -717,6 +798,15 @@ func (rcv *Monster) VectorOfEnumsLength() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *Monster) MutateVectorOfEnums(j int, n Color) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(98))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateInt8(a+flatbuffers.UOffsetT(j*1), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func MonsterStart(builder *flatbuffers.Builder) {
|
func MonsterStart(builder *flatbuffers.Builder) {
|
||||||
builder.StartObject(48)
|
builder.StartObject(48)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,6 +163,15 @@ func (rcv *TypeAliases) V8Length() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *TypeAliases) MutateV8(j int, n int8) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(24))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateInt8(a+flatbuffers.UOffsetT(j*1), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (rcv *TypeAliases) Vf64(j int) float64 {
|
func (rcv *TypeAliases) Vf64(j int) float64 {
|
||||||
o := flatbuffers.UOffsetT(rcv._tab.Offset(26))
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(26))
|
||||||
if o != 0 {
|
if o != 0 {
|
||||||
@@ -180,6 +189,15 @@ func (rcv *TypeAliases) Vf64Length() int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rcv *TypeAliases) MutateVf64(j int, n float64) bool {
|
||||||
|
o := flatbuffers.UOffsetT(rcv._tab.Offset(26))
|
||||||
|
if o != 0 {
|
||||||
|
a := rcv._tab.Vector(o)
|
||||||
|
return rcv._tab.MutateFloat64(a+flatbuffers.UOffsetT(j*8), n)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func TypeAliasesStart(builder *flatbuffers.Builder) {
|
func TypeAliasesStart(builder *flatbuffers.Builder) {
|
||||||
builder.StartObject(12)
|
builder.StartObject(12)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, fail func(string
|
|||||||
testcase{"Pos.Test2'", func() bool { return monster.Pos(nil).Test2() == int8(2) }},
|
testcase{"Pos.Test2'", func() bool { return monster.Pos(nil).Test2() == int8(2) }},
|
||||||
testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).A() == int16(5) }},
|
testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).A() == int16(5) }},
|
||||||
testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).B() == int8(6) }},
|
testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).B() == int8(6) }},
|
||||||
|
testcase{"Inventory[2]", func() bool { return monster.Inventory(2) == byte(2) }},
|
||||||
}
|
}
|
||||||
|
|
||||||
testMutability := []testcase{
|
testMutability := []testcase{
|
||||||
@@ -347,6 +348,7 @@ func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, fail func(string
|
|||||||
testcase{"Pos.Test2", func() bool { return monster.Pos(nil).MutateTest2(20) }},
|
testcase{"Pos.Test2", func() bool { return monster.Pos(nil).MutateTest2(20) }},
|
||||||
testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).MutateA(50) }},
|
testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).MutateA(50) }},
|
||||||
testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).MutateB(60) }},
|
testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).MutateB(60) }},
|
||||||
|
testcase{"Inventory[2]", func() bool { return monster.MutateInventory(2, 200) }},
|
||||||
}
|
}
|
||||||
|
|
||||||
testForMutatedValues := []testcase{
|
testForMutatedValues := []testcase{
|
||||||
@@ -360,6 +362,7 @@ func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, fail func(string
|
|||||||
testcase{"Pos.Test2'", func() bool { return monster.Pos(nil).Test2() == int8(20) }},
|
testcase{"Pos.Test2'", func() bool { return monster.Pos(nil).Test2() == int8(20) }},
|
||||||
testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).A() == int16(50) }},
|
testcase{"Pos.Test3.A", func() bool { return monster.Pos(nil).Test3(nil).A() == int16(50) }},
|
||||||
testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).B() == int8(60) }},
|
testcase{"Pos.Test3.B", func() bool { return monster.Pos(nil).Test3(nil).B() == int8(60) }},
|
||||||
|
testcase{"Inventory[2]", func() bool { return monster.Inventory(2) == byte(200) }},
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure original values are okay
|
// make sure original values are okay
|
||||||
@@ -412,6 +415,7 @@ func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, fail func(string
|
|||||||
monster.Pos(nil).MutateTest2(2)
|
monster.Pos(nil).MutateTest2(2)
|
||||||
monster.Pos(nil).Test3(nil).MutateA(5)
|
monster.Pos(nil).Test3(nil).MutateA(5)
|
||||||
monster.Pos(nil).Test3(nil).MutateB(6)
|
monster.Pos(nil).Test3(nil).MutateB(6)
|
||||||
|
monster.MutateInventory(2, 2)
|
||||||
|
|
||||||
for _, t := range testForOriginalValues {
|
for _, t := range testForOriginalValues {
|
||||||
if !t.testfn() {
|
if !t.testfn() {
|
||||||
|
|||||||
Reference in New Issue
Block a user