Added create function for swift (#5707)
authormustiikhalil <mustii@mmk.one>
Mon, 13 Jan 2020 20:34:06 +0000 (23:34 +0300)
committerWouter van Oortmerssen <aardappel@gmail.com>
Mon, 13 Jan 2020 20:34:06 +0000 (12:34 -0800)
Fixed the create functions and updated the test cases in swift

Removes unneeded code

Updated documentation

docs/source/Tutorial.md
samples/sample_binary.swift
src/idl_gen_swift.cpp
tests/FlatBuffers.Test.Swift/Tests/FlatBuffers.Test.SwiftTests/FlatBuffersUnionTests.swift
tests/FlatBuffers.Test.Swift/Tests/FlatBuffers.Test.SwiftTests/monster_test_generated.swift
tests/FlatBuffers.Test.Swift/Tests/FlatBuffers.Test.SwiftTests/union_vector_generated.swift

index 00408b5..f871c4c 100644 (file)
@@ -1699,16 +1699,15 @@ can serialize the monster itself:
 </div>
 <div class="language-swift">
 ~~~{.swift}
-  let start = Monster.startMonster(builder)
-  Monster.add(pos: pos, builder)
-  Monster.add(hp: 300, builder)
-  Monster.add(name: name, builder)
-  Monster.add(inventory: inventoryOffset, builder)
-  Monster.add(color: .red, builder)
-  Monster.add(weapons: weaponsOffset, builder)
-  Monster.add(equippedType: .weapon, builder)
-  Monster.add(equipped: axe, builder)
-  var orc = Monster.endMonster(builder, start: start)
+  let orc = Monster.createMonster(builder, 
+                                  offsetOfPos: pos,
+                                  hp: 300,
+                                  offsetOfName: name,
+                                  vectorOfInventory: inventoryOffset,
+                                  color: .red,
+                                  vectorOfWeapons: weaponsOffset,
+                                  equippedType: .weapon,
+                                  offsetOfEquipped: axe)
 ~~~
 </div>
 
@@ -1776,6 +1775,21 @@ a bit more flexibility.
 ~~~
 </div>
 
+<div class="language-swift">
+~~~{.swift}
+  let start = Monster.startMonster(builder)
+  Monster.add(pos: pos, builder)
+  Monster.add(hp: 300, builder)
+  Monster.add(name: name, builder)
+  Monster.addVectorOf(inventory: inventoryOffset, builder)
+  Monster.add(color: .red, builder)
+  Monster.addVectorOf(weapons: weaponsOffset, builder)
+  Monster.add(equippedType: .weapon, builder)
+  Monster.add(equipped: axe, builder)
+  var orc = Monster.endMonster(builder, start: start)
+~~~
+</div>
+
 Before finishing the serialization, let's take a quick look at FlatBuffer
 `union Equipped`. There are two parts to each FlatBuffer `union`. The first, is
 a hidden field `_type`, that is generated to hold the type of `table` referred
index e334fab..3a6dc74 100644 (file)
@@ -1,10 +1,10 @@
  // THIS IS JUST TO SHOW THE CODE, PLEASE DO IMPORT FLATBUFFERS WITH SPM..
 import Flatbuffers
 
-typealias Monster = MyGame1.Sample.Monster
-typealias Weapon = MyGame1.Sample.Weapon
-typealias Color = MyGame1.Sample.Color
-typealias Vec3 = MyGame1.Sample.Vec3
+typealias Monster = MyGame.Sample.Monster
+typealias Weapon = MyGame.Sample.Weapon
+typealias Color = MyGame.Sample.Color
+typealias Vec3 = MyGame.Sample.Vec3
 
 func main() {
     let expectedDMG: [Int16] = [3, 5]
@@ -30,16 +30,16 @@ func main() {
     let weaponsOffset = builder.createVector(ofOffsets: [sword, axe])
     let pos = builder.create(struct: MyGame.Sample.createVec3(x: 1, y: 2, z: 3), type: Vec3.self)
     
-    let start = Monster.startMonster(builder)
-    Monster.add(pos: pos, builder)
-    Monster.add(hp: 300, builder)
-    Monster.add(name: name, builder)
-    Monster.add(inventory: inventoryOffset, builder)
-    Monster.add(color: .red, builder)
-    Monster.add(weapons: weaponsOffset, builder)
-    Monster.add(equippedType: .weapon, builder)
-    Monster.add(equipped: axe, builder)
-    var orc = Monster.endMonster(builder, start: start)
+    
+    let orc = Monster.createMonster(builder, 
+                                    offsetOfPos: pos,
+                                    hp: 300,
+                                    offsetOfName: name,
+                                    vectorOfInventory: inventoryOffset,
+                                    color: .red,
+                                    vectorOfWeapons: weaponsOffset,
+                                    equippedType: .weapon,
+                                    offsetOfEquipped: axe)
     builder.finish(offset: orc)
     
     var buf = builder.sizedByteArray
@@ -48,7 +48,7 @@ func main() {
     assert(monster.mana == 150)
     assert(monster.hp == 300)
     assert(monster.name == "Orc")
-    assert(monster.color == MyGame1.Sample.Color.red)
+    assert(monster.color == MyGame.Sample.Color.red)
     assert(monster.pos != nil)
     for i in 0..<monster.inventoryCount {
         assert(i == monster.inventory(at: i))
index 04c099f..4f4dd5b 100644 (file)
@@ -213,14 +213,16 @@ class SwiftGenerator : public BaseGenerator {
 
   void GenTableWriter(const StructDef &struct_def) {
     flatbuffers::FieldDef *key_field = nullptr;
+    std::vector<std::string> require_fields;
+    std::string create_func_body;
+    std::string create_func_header;
+    auto should_generate_create = struct_def.fields.vec.size() != 0;
 
     code_.SetValue("NUMBEROFFIELDS", NumToString(struct_def.fields.vec.size()));
     code_ +=
         "\tpublic static func start{{STRUCTNAME}}(_ fbb: FlatBufferBuilder) -> "
         "UOffset { fbb.startTable(with: {{NUMBEROFFIELDS}}) }";
 
-    std::vector<std::string> require_fields;
-
     for (auto it = struct_def.fields.vec.begin();
          it != struct_def.fields.vec.end(); ++it) {
       auto &field = **it;
@@ -230,7 +232,8 @@ class SwiftGenerator : public BaseGenerator {
         require_fields.push_back(NumToString(field.value.offset));
 
       GenTableWriterFields(
-          field, static_cast<int>(it - struct_def.fields.vec.begin()));
+          field, &create_func_body, &create_func_header,
+          static_cast<int>(it - struct_def.fields.vec.begin()));
     }
     code_ +=
         "\tpublic static func end{{STRUCTNAME}}(_ fbb: FlatBufferBuilder, "
@@ -246,6 +249,19 @@ class SwiftGenerator : public BaseGenerator {
     }
     code_ += "; return end }";
 
+    code_ +=
+        "\tpublic static func create{{STRUCTNAME}}(_ fbb: FlatBufferBuilder\\";
+    if (should_generate_create)
+      code_ += ",\n" +
+               create_func_header.substr(0, create_func_header.size() - 2) +
+               "\\";
+    code_ += ") -> Offset<UOffset> {";
+    code_ += "\t\tlet start = {{STRUCTNAME}}.start{{STRUCTNAME}}(fbb)";
+    if (should_generate_create)
+      code_ += create_func_body.substr(0, create_func_body.size() - 1);
+    code_ += "\t\treturn {{STRUCTNAME}}.end{{STRUCTNAME}}(fbb, start: start)";
+    code_ += "\t}";
+
     std::string spacing = "\t\t";
 
     if (key_field != nullptr && !struct_def.fixed && struct_def.has_key) {
@@ -268,8 +284,11 @@ class SwiftGenerator : public BaseGenerator {
     }
   }
 
-  void GenTableWriterFields(const FieldDef &field, const int position) {
+  void GenTableWriterFields(const FieldDef &field, std::string *create_body,
+                            std::string *create_header, const int position) {
     std::string builder_string = ", _ fbb: FlatBufferBuilder) { fbb.add(";
+    auto &create_func_body = *create_body;
+    auto &create_func_header = *create_header;
     auto name = Name(field);
     auto type = GenType(field.value.type);
     code_.SetValue("VALUENAME", name);
@@ -279,30 +298,48 @@ class SwiftGenerator : public BaseGenerator {
     std::string check_if_vector =
         (field.value.type.base_type == BASE_TYPE_VECTOR ||
          field.value.type.base_type == BASE_TYPE_ARRAY)
-            ? "VectorOf"
-            : "";
-    code_ +=
-        "\tpublic static func add" + check_if_vector + "({{VALUENAME}}: \\";
+            ? "VectorOf("
+            : "(";
+    std::string body = "add" + check_if_vector + name + ": ";
+    code_ += "\tpublic static func " + body + "\\";
+
+    create_func_body += "\t\t{{STRUCTNAME}}." + body + name + ", fbb)\n";
 
     if (IsScalar(field.value.type.base_type) &&
         !IsBool(field.value.type.base_type)) {
+      auto default_value = IsEnum(field.value.type) ? GenEnumDefaultValue(field)
+                                                    : field.value.constant;
       auto is_enum = IsEnum(field.value.type) ? ".rawValue" : "";
       code_ += "{{VALUETYPE}}" + builder_string + "element: {{VALUENAME}}" +
                is_enum + ", def: {{CONSTANT}}, at: {{OFFSET}}) }";
+      create_func_header +=
+          "\t\t" + name + ": " + type + " = " + default_value + ",\n";
       return;
     }
+
     if (IsBool(field.value.type.base_type)) {
+      std::string default_value =
+          "0" == field.value.constant ? "false" : "true";
       code_.SetValue("VALUETYPE", "Bool");
-      code_.SetValue("CONSTANT",
-                     "0" == field.value.constant ? "false" : "true");
+      code_.SetValue("CONSTANT", default_value);
       code_ += "{{VALUETYPE}}" + builder_string +
                "condition: {{VALUENAME}}, def: {{CONSTANT}}, at: {{OFFSET}}) }";
+      create_func_header +=
+          "\t\t" + name + ": " + type + " = " + default_value + ",\n";
       return;
     }
 
     auto offset_type = field.value.type.base_type == BASE_TYPE_STRING
                            ? "Offset<String>"
                            : "Offset<UOffset>";
+    auto camel_case_name =
+        (field.value.type.base_type == BASE_TYPE_VECTOR ||
+                 field.value.type.base_type == BASE_TYPE_ARRAY
+             ? "vectorOf"
+             : "offsetOf") +
+        MakeCamel(name, true);
+    create_func_header += "\t\t" + camel_case_name + " " + name + ": " +
+                          offset_type + " = Offset(),\n";
     auto reader_type =
         IsStruct(field.value.type) && field.value.type.struct_def->fixed
             ? "structOffset: {{OFFSET}}) }"
@@ -444,7 +481,7 @@ class SwiftGenerator : public BaseGenerator {
 
     if (IsEnum(vectortype)) {
       code_.SetValue("BASEVALUE", GenTypeBasic(vectortype, false));
-      code_ += "return o == 0 ? " + GenEnumDefaultValue(field) +
+      code_ += "return o == 0 ? {{VALUETYPE}}" + GenEnumDefaultValue(field) +
                " : {{VALUETYPE}}(rawValue: {{ACCESS}}.directRead(of: "
                "{{BASEVALUE}}.self, offset: {{ACCESS}}.vector(at: o) + "
                "index * {{SIZE}})) }";
@@ -634,7 +671,7 @@ class SwiftGenerator : public BaseGenerator {
       name = ev.name;
     }
     std::transform(name.begin(), name.end(), name.begin(), LowerCase);
-    return "{{VALUETYPE}}." + name;
+    return "." + name;
   }
 
   std::string GenEnumConstructor(const std::string &at) {
index d652429..b9e9757 100644 (file)
@@ -88,11 +88,7 @@ final class FlatBuffersUnionTests: XCTestCase {
         ]
         let types = fb.createVector(characterType)
         let characterVector = fb.createVector(ofOffsets: characters)
-        
-        let movieStart = Movie.startMovie(fb)
-        Movie.addVectorOf(charactersType: types, fb)
-        Movie.addVectorOf(characters: characterVector, fb)
-        let end = Movie.endMovie(fb, start: movieStart)
+        let end = Movie.createMovie(fb, vectorOfCharactersType: types, vectorOfCharacters: characterVector)
         Movie.finish(fb, end: end)
         
         let movie = Movie.getRootAsMovie(bb: fb.buffer)
index aa6675d..eeea376 100644 (file)
@@ -66,7 +66,7 @@ public struct Vec3: Readable {
        public func mutate(z: Float32) -> Bool { return _accessor.mutate(z, index: 8) }
        public var test1: Double { return _accessor.readBuffer(of: Double.self, at: 16) }
        public func mutate(test1: Double) -> Bool { return _accessor.mutate(test1, index: 16) }
-       public var test2: MyGame.Example.Color { return MyGame.Example.Color(rawValue: _accessor.readBuffer(of: UInt8.self, at: 24)) ?? MyGame.Example.Color.red }
+       public var test2: MyGame.Example.Color { return MyGame.Example.Color(rawValue: _accessor.readBuffer(of: UInt8.self, at: 24)) ?? .red }
        public var test3: MyGame.Example.Test { return MyGame.Example.Test(_accessor.bb, o: _accessor.postion + 26) }
 }
 
@@ -126,6 +126,10 @@ public struct InParentNamespace: FlatBufferObject {
 
        public static func startInParentNamespace(_ fbb: FlatBufferBuilder) -> UOffset { fbb.startTable(with: 0) }
        public static func endInParentNamespace(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createInParentNamespace(_ fbb: FlatBufferBuilder) -> Offset<UOffset> {
+               let start = InParentNamespace.startInParentNamespace(fbb)
+               return InParentNamespace.endInParentNamespace(fbb, start: start)
+       }
 }
 
 public enum Example2 {
@@ -140,6 +144,10 @@ public struct Monster: FlatBufferObject {
 
        public static func startMonster(_ fbb: FlatBufferBuilder) -> UOffset { fbb.startTable(with: 0) }
        public static func endMonster(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createMonster(_ fbb: FlatBufferBuilder) -> Offset<UOffset> {
+               let start = Monster.startMonster(fbb)
+               return Monster.endMonster(fbb, start: start)
+       }
 }
 
 }
@@ -158,11 +166,17 @@ public struct TestSimpleTableWithEnum: FlatBufferObject {
        private init(_ t: Table) { _accessor = t }
        public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) }
 
-       public var color: MyGame.Example.Color { let o = _accessor.offset(4); return o == 0 ? MyGame.Example.Color.green : MyGame.Example.Color(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? MyGame.Example.Color.green }
+       public var color: MyGame.Example.Color { let o = _accessor.offset(4); return o == 0 ? .green : MyGame.Example.Color(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .green }
        public func mutate(color: MyGame.Example.Color) -> Bool {let o = _accessor.offset(4);  return _accessor.mutate(color.rawValue, index: o) }
        public static func startTestSimpleTableWithEnum(_ fbb: FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
        public static func add(color: MyGame.Example.Color, _ fbb: FlatBufferBuilder) { fbb.add(element: color.rawValue, def: 2, at: 0) }
        public static func endTestSimpleTableWithEnum(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createTestSimpleTableWithEnum(_ fbb: FlatBufferBuilder,
+               color: MyGame.Example.Color = .green) -> Offset<UOffset> {
+               let start = TestSimpleTableWithEnum.startTestSimpleTableWithEnum(fbb)
+               TestSimpleTableWithEnum.add(color: color, fbb)
+               return TestSimpleTableWithEnum.endTestSimpleTableWithEnum(fbb, start: start)
+       }
 }
 
 public struct Stat: FlatBufferObject {
@@ -184,6 +198,16 @@ public struct Stat: FlatBufferObject {
        public static func add(val: Int64, _ fbb: FlatBufferBuilder) { fbb.add(element: val, def: 0, at: 1) }
        public static func add(count: UInt16, _ fbb: FlatBufferBuilder) { fbb.add(element: count, def: 0, at: 2) }
        public static func endStat(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createStat(_ fbb: FlatBufferBuilder,
+               offsetOfId id: Offset<String> = Offset(),
+               val: Int64 = 0,
+               count: UInt16 = 0) -> Offset<UOffset> {
+               let start = Stat.startStat(fbb)
+               Stat.add(id: id, fbb)
+               Stat.add(val: val, fbb)
+               Stat.add(count: count, fbb)
+               return Stat.endStat(fbb, start: start)
+       }
 }
 
 public struct Referrable: FlatBufferObject {
@@ -199,6 +223,12 @@ public struct Referrable: FlatBufferObject {
        public static func startReferrable(_ fbb: FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
        public static func add(id: UInt64, _ fbb: FlatBufferBuilder) { fbb.add(element: id, def: 0, at: 0) }
        public static func endReferrable(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createReferrable(_ fbb: FlatBufferBuilder,
+               id: UInt64 = 0) -> Offset<UOffset> {
+               let start = Referrable.startReferrable(fbb)
+               Referrable.add(id: id, fbb)
+               return Referrable.endReferrable(fbb, start: start)
+       }
        public static func sortVectorOfReferrable(offsets:[Offset<UOffset>], _ fbb: FlatBufferBuilder) -> Offset<UOffset> {
                var off = offsets
                off.sort { Table.compare(Table.offset(Int32($1.o), vOffset: 4, fbb: fbb.buffer), Table.offset(Int32($0.o), vOffset: 4, fbb: fbb.buffer), fbb: fbb.buffer) < 0 } 
@@ -244,9 +274,9 @@ public struct Monster: FlatBufferObject {
        public func inventory(at index: Int32) -> UInt8 { let o = _accessor.offset(14); return o == 0 ? 0 : _accessor.directRead(of: UInt8.self, offset: _accessor.vector(at: o) + index * 1) }
        public var inventory: [UInt8] { return _accessor.getVector(at: 14) ?? [] }
        public func mutate(inventory: UInt8, at index: Int32) -> Bool { let o = _accessor.offset(14); return _accessor.directMutate(inventory, index: _accessor.vector(at: o) + index * 1) }
-       public var color: MyGame.Example.Color { let o = _accessor.offset(16); return o == 0 ? MyGame.Example.Color.blue : MyGame.Example.Color(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? MyGame.Example.Color.blue }
+       public var color: MyGame.Example.Color { let o = _accessor.offset(16); return o == 0 ? .blue : MyGame.Example.Color(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .blue }
        public func mutate(color: MyGame.Example.Color) -> Bool {let o = _accessor.offset(16);  return _accessor.mutate(color.rawValue, index: o) }
-       public var testType: MyGame.Example.Any_ { let o = _accessor.offset(18); return o == 0 ? MyGame.Example.Any_.none : MyGame.Example.Any_(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? MyGame.Example.Any_.none }
+       public var testType: MyGame.Example.Any_ { let o = _accessor.offset(18); return o == 0 ? .none : MyGame.Example.Any_(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none }
        public func test<T: FlatBufferObject>(type: T.Type) -> T? { let o = _accessor.offset(20); return o == 0 ? nil : _accessor.union(o) }
        public var test4Count: Int32 { let o = _accessor.offset(22); return o == 0 ? 0 : _accessor.vector(count: o) }
        public func test4(at index: Int32) -> MyGame.Example.Test? { let o = _accessor.offset(22); return o == 0 ? nil : MyGame.Example.Test(_accessor.bb, o: _accessor.vector(at: o) + index * 4) }
@@ -332,13 +362,13 @@ public struct Monster: FlatBufferObject {
        public func vectorOfNonOwningReferences(at index: Int32) -> UInt64 { let o = _accessor.offset(88); return o == 0 ? 0 : _accessor.directRead(of: UInt64.self, offset: _accessor.vector(at: o) + index * 8) }
        public var vectorOfNonOwningReferences: [UInt64] { return _accessor.getVector(at: 88) ?? [] }
        public func mutate(vectorOfNonOwningReferences: UInt64, at index: Int32) -> Bool { let o = _accessor.offset(88); return _accessor.directMutate(vectorOfNonOwningReferences, index: _accessor.vector(at: o) + index * 8) }
-       public var anyUniqueType: MyGame.Example.AnyUniqueAliases { let o = _accessor.offset(90); return o == 0 ? MyGame.Example.AnyUniqueAliases.none : MyGame.Example.AnyUniqueAliases(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? MyGame.Example.AnyUniqueAliases.none }
+       public var anyUniqueType: MyGame.Example.AnyUniqueAliases { let o = _accessor.offset(90); return o == 0 ? .none : MyGame.Example.AnyUniqueAliases(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none }
        public func anyUnique<T: FlatBufferObject>(type: T.Type) -> T? { let o = _accessor.offset(92); return o == 0 ? nil : _accessor.union(o) }
-       public var anyAmbiguousType: MyGame.Example.AnyAmbiguousAliases { let o = _accessor.offset(94); return o == 0 ? MyGame.Example.AnyAmbiguousAliases.none : MyGame.Example.AnyAmbiguousAliases(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? MyGame.Example.AnyAmbiguousAliases.none }
+       public var anyAmbiguousType: MyGame.Example.AnyAmbiguousAliases { let o = _accessor.offset(94); return o == 0 ? .none : MyGame.Example.AnyAmbiguousAliases(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none }
        public func anyAmbiguous<T: FlatBufferObject>(type: T.Type) -> T? { let o = _accessor.offset(96); return o == 0 ? nil : _accessor.union(o) }
        public var vectorOfEnumsCount: Int32 { let o = _accessor.offset(98); return o == 0 ? 0 : _accessor.vector(count: o) }
        public func vectorOfEnums(at index: Int32) -> MyGame.Example.Color? { let o = _accessor.offset(98); return o == 0 ? MyGame.Example.Color.red : MyGame.Example.Color(rawValue: _accessor.directRead(of: UInt8.self, offset: _accessor.vector(at: o) + index * 1)) }
-       public var signedEnum: MyGame.Example.Race { let o = _accessor.offset(100); return o == 0 ? MyGame.Example.Race.none : MyGame.Example.Race(rawValue: _accessor.readBuffer(of: Int8.self, at: o)) ?? MyGame.Example.Race.none }
+       public var signedEnum: MyGame.Example.Race { let o = _accessor.offset(100); return o == 0 ? .none : MyGame.Example.Race(rawValue: _accessor.readBuffer(of: Int8.self, at: o)) ?? .none }
        public func mutate(signedEnum: MyGame.Example.Race) -> Bool {let o = _accessor.offset(100);  return _accessor.mutate(signedEnum.rawValue, index: o) }
        public static func startMonster(_ fbb: FlatBufferBuilder) -> UOffset { fbb.startTable(with: 49) }
        public static func add(pos: Offset<UOffset>, _ fbb: FlatBufferBuilder) { fbb.add(structOffset: 0) }
@@ -390,6 +420,106 @@ public struct Monster: FlatBufferObject {
        public static func addVectorOf(vectorOfEnums: Offset<UOffset>, _ fbb: FlatBufferBuilder) { fbb.add(offset: vectorOfEnums, at: 47)  }
        public static func add(signedEnum: MyGame.Example.Race, _ fbb: FlatBufferBuilder) { fbb.add(element: signedEnum.rawValue, def: -1, at: 48) }
        public static func endMonster(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); fbb.require(table: end, fields: [10]); return end }
+       public static func createMonster(_ fbb: FlatBufferBuilder,
+               offsetOfPos pos: Offset<UOffset> = Offset(),
+               mana: Int16 = 150,
+               hp: Int16 = 100,
+               offsetOfName name: Offset<String> = Offset(),
+               vectorOfInventory inventory: Offset<UOffset> = Offset(),
+               color: MyGame.Example.Color = .blue,
+               testType: MyGame.Example.Any_ = .none,
+               offsetOfTest test: Offset<UOffset> = Offset(),
+               vectorOfTest4 test4: Offset<UOffset> = Offset(),
+               vectorOfTestarrayofstring testarrayofstring: Offset<UOffset> = Offset(),
+               vectorOfTestarrayoftables testarrayoftables: Offset<UOffset> = Offset(),
+               offsetOfEnemy enemy: Offset<UOffset> = Offset(),
+               vectorOfTestnestedflatbuffer testnestedflatbuffer: Offset<UOffset> = Offset(),
+               offsetOfTestempty testempty: Offset<UOffset> = Offset(),
+               testbool: Bool = false,
+               testhashs32Fnv1: Int32 = 0,
+               testhashu32Fnv1: UInt32 = 0,
+               testhashs64Fnv1: Int64 = 0,
+               testhashu64Fnv1: UInt64 = 0,
+               testhashs32Fnv1a: Int32 = 0,
+               testhashu32Fnv1a: UInt32 = 0,
+               testhashs64Fnv1a: Int64 = 0,
+               testhashu64Fnv1a: UInt64 = 0,
+               vectorOfTestarrayofbools testarrayofbools: Offset<UOffset> = Offset(),
+               testf: Float32 = 3.14159,
+               testf2: Float32 = 3.0,
+               testf3: Float32 = 0.0,
+               vectorOfTestarrayofstring2 testarrayofstring2: Offset<UOffset> = Offset(),
+               vectorOfTestarrayofsortedstruct testarrayofsortedstruct: Offset<UOffset> = Offset(),
+               vectorOfFlex flex: Offset<UOffset> = Offset(),
+               vectorOfTest5 test5: Offset<UOffset> = Offset(),
+               vectorOfVectorOfLongs vectorOfLongs: Offset<UOffset> = Offset(),
+               vectorOfVectorOfDoubles vectorOfDoubles: Offset<UOffset> = Offset(),
+               offsetOfParentNamespaceTest parentNamespaceTest: Offset<UOffset> = Offset(),
+               vectorOfVectorOfReferrables vectorOfReferrables: Offset<UOffset> = Offset(),
+               singleWeakReference: UInt64 = 0,
+               vectorOfVectorOfWeakReferences vectorOfWeakReferences: Offset<UOffset> = Offset(),
+               vectorOfVectorOfStrongReferrables vectorOfStrongReferrables: Offset<UOffset> = Offset(),
+               coOwningReference: UInt64 = 0,
+               vectorOfVectorOfCoOwningReferences vectorOfCoOwningReferences: Offset<UOffset> = Offset(),
+               nonOwningReference: UInt64 = 0,
+               vectorOfVectorOfNonOwningReferences vectorOfNonOwningReferences: Offset<UOffset> = Offset(),
+               anyUniqueType: MyGame.Example.AnyUniqueAliases = .none,
+               offsetOfAnyUnique anyUnique: Offset<UOffset> = Offset(),
+               anyAmbiguousType: MyGame.Example.AnyAmbiguousAliases = .none,
+               offsetOfAnyAmbiguous anyAmbiguous: Offset<UOffset> = Offset(),
+               vectorOfVectorOfEnums vectorOfEnums: Offset<UOffset> = Offset(),
+               signedEnum: MyGame.Example.Race = .none) -> Offset<UOffset> {
+               let start = Monster.startMonster(fbb)
+               Monster.add(pos: pos, fbb)
+               Monster.add(mana: mana, fbb)
+               Monster.add(hp: hp, fbb)
+               Monster.add(name: name, fbb)
+               Monster.addVectorOf(inventory: inventory, fbb)
+               Monster.add(color: color, fbb)
+               Monster.add(testType: testType, fbb)
+               Monster.add(test: test, fbb)
+               Monster.addVectorOf(test4: test4, fbb)
+               Monster.addVectorOf(testarrayofstring: testarrayofstring, fbb)
+               Monster.addVectorOf(testarrayoftables: testarrayoftables, fbb)
+               Monster.add(enemy: enemy, fbb)
+               Monster.addVectorOf(testnestedflatbuffer: testnestedflatbuffer, fbb)
+               Monster.add(testempty: testempty, fbb)
+               Monster.add(testbool: testbool, fbb)
+               Monster.add(testhashs32Fnv1: testhashs32Fnv1, fbb)
+               Monster.add(testhashu32Fnv1: testhashu32Fnv1, fbb)
+               Monster.add(testhashs64Fnv1: testhashs64Fnv1, fbb)
+               Monster.add(testhashu64Fnv1: testhashu64Fnv1, fbb)
+               Monster.add(testhashs32Fnv1a: testhashs32Fnv1a, fbb)
+               Monster.add(testhashu32Fnv1a: testhashu32Fnv1a, fbb)
+               Monster.add(testhashs64Fnv1a: testhashs64Fnv1a, fbb)
+               Monster.add(testhashu64Fnv1a: testhashu64Fnv1a, fbb)
+               Monster.addVectorOf(testarrayofbools: testarrayofbools, fbb)
+               Monster.add(testf: testf, fbb)
+               Monster.add(testf2: testf2, fbb)
+               Monster.add(testf3: testf3, fbb)
+               Monster.addVectorOf(testarrayofstring2: testarrayofstring2, fbb)
+               Monster.addVectorOf(testarrayofsortedstruct: testarrayofsortedstruct, fbb)
+               Monster.addVectorOf(flex: flex, fbb)
+               Monster.addVectorOf(test5: test5, fbb)
+               Monster.addVectorOf(vectorOfLongs: vectorOfLongs, fbb)
+               Monster.addVectorOf(vectorOfDoubles: vectorOfDoubles, fbb)
+               Monster.add(parentNamespaceTest: parentNamespaceTest, fbb)
+               Monster.addVectorOf(vectorOfReferrables: vectorOfReferrables, fbb)
+               Monster.add(singleWeakReference: singleWeakReference, fbb)
+               Monster.addVectorOf(vectorOfWeakReferences: vectorOfWeakReferences, fbb)
+               Monster.addVectorOf(vectorOfStrongReferrables: vectorOfStrongReferrables, fbb)
+               Monster.add(coOwningReference: coOwningReference, fbb)
+               Monster.addVectorOf(vectorOfCoOwningReferences: vectorOfCoOwningReferences, fbb)
+               Monster.add(nonOwningReference: nonOwningReference, fbb)
+               Monster.addVectorOf(vectorOfNonOwningReferences: vectorOfNonOwningReferences, fbb)
+               Monster.add(anyUniqueType: anyUniqueType, fbb)
+               Monster.add(anyUnique: anyUnique, fbb)
+               Monster.add(anyAmbiguousType: anyAmbiguousType, fbb)
+               Monster.add(anyAmbiguous: anyAmbiguous, fbb)
+               Monster.addVectorOf(vectorOfEnums: vectorOfEnums, fbb)
+               Monster.add(signedEnum: signedEnum, fbb)
+               return Monster.endMonster(fbb, start: start)
+       }
        public static func sortVectorOfMonster(offsets:[Offset<UOffset>], _ fbb: FlatBufferBuilder) -> Offset<UOffset> {
                var off = offsets
                off.sort { Table.compare(Table.offset(Int32($1.o), vOffset: 10, fbb: fbb.buffer), Table.offset(Int32($0.o), vOffset: 10, fbb: fbb.buffer), fbb: fbb.buffer) < 0 } 
@@ -467,6 +597,34 @@ public struct TypeAliases: FlatBufferObject {
        public static func addVectorOf(v8: Offset<UOffset>, _ fbb: FlatBufferBuilder) { fbb.add(offset: v8, at: 10)  }
        public static func addVectorOf(vf64: Offset<UOffset>, _ fbb: FlatBufferBuilder) { fbb.add(offset: vf64, at: 11)  }
        public static func endTypeAliases(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createTypeAliases(_ fbb: FlatBufferBuilder,
+               i8: Int8 = 0,
+               u8: UInt8 = 0,
+               i16: Int16 = 0,
+               u16: UInt16 = 0,
+               i32: Int32 = 0,
+               u32: UInt32 = 0,
+               i64: Int64 = 0,
+               u64: UInt64 = 0,
+               f32: Float32 = 0.0,
+               f64: Double = 0.0,
+               vectorOfV8 v8: Offset<UOffset> = Offset(),
+               vectorOfVf64 vf64: Offset<UOffset> = Offset()) -> Offset<UOffset> {
+               let start = TypeAliases.startTypeAliases(fbb)
+               TypeAliases.add(i8: i8, fbb)
+               TypeAliases.add(u8: u8, fbb)
+               TypeAliases.add(i16: i16, fbb)
+               TypeAliases.add(u16: u16, fbb)
+               TypeAliases.add(i32: i32, fbb)
+               TypeAliases.add(u32: u32, fbb)
+               TypeAliases.add(i64: i64, fbb)
+               TypeAliases.add(u64: u64, fbb)
+               TypeAliases.add(f32: f32, fbb)
+               TypeAliases.add(f64: f64, fbb)
+               TypeAliases.addVectorOf(v8: v8, fbb)
+               TypeAliases.addVectorOf(vf64: vf64, fbb)
+               return TypeAliases.endTypeAliases(fbb, start: start)
+       }
 }
 
 }
index c1c6aca..3475202 100644 (file)
@@ -56,6 +56,12 @@ public struct Attacker: FlatBufferObject {
        public static func startAttacker(_ fbb: FlatBufferBuilder) -> UOffset { fbb.startTable(with: 1) }
        public static func add(swordAttackDamage: Int32, _ fbb: FlatBufferBuilder) { fbb.add(element: swordAttackDamage, def: 0, at: 0) }
        public static func endAttacker(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createAttacker(_ fbb: FlatBufferBuilder,
+               swordAttackDamage: Int32 = 0) -> Offset<UOffset> {
+               let start = Attacker.startAttacker(fbb)
+               Attacker.add(swordAttackDamage: swordAttackDamage, fbb)
+               return Attacker.endAttacker(fbb, start: start)
+       }
 }
 
 public struct Movie: FlatBufferObject {
@@ -66,7 +72,7 @@ public struct Movie: FlatBufferObject {
        private init(_ t: Table) { _accessor = t }
        public init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) }
 
-       public var mainCharacterType: Character { let o = _accessor.offset(4); return o == 0 ? Character.none : Character(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? Character.none }
+       public var mainCharacterType: Character { let o = _accessor.offset(4); return o == 0 ? .none : Character(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none }
        public func mainCharacter<T: FlatBufferObject>(type: T.Type) -> T? { let o = _accessor.offset(6); return o == 0 ? nil : _accessor.union(o) }
        public var charactersTypeCount: Int32 { let o = _accessor.offset(8); return o == 0 ? 0 : _accessor.vector(count: o) }
        public func charactersType(at index: Int32) -> Character? { let o = _accessor.offset(8); return o == 0 ? Character.none : Character(rawValue: _accessor.directRead(of: UInt8.self, offset: _accessor.vector(at: o) + index * 1)) }
@@ -78,5 +84,17 @@ public struct Movie: FlatBufferObject {
        public static func addVectorOf(charactersType: Offset<UOffset>, _ fbb: FlatBufferBuilder) { fbb.add(offset: charactersType, at: 2)  }
        public static func addVectorOf(characters: Offset<UOffset>, _ fbb: FlatBufferBuilder) { fbb.add(offset: characters, at: 3)  }
        public static func endMovie(_ fbb: FlatBufferBuilder, start: UOffset) -> Offset<UOffset> { let end = Offset<UOffset>(offset: fbb.endTable(at: start)); return end }
+       public static func createMovie(_ fbb: FlatBufferBuilder,
+               mainCharacterType: Character = .none,
+               offsetOfMainCharacter mainCharacter: Offset<UOffset> = Offset(),
+               vectorOfCharactersType charactersType: Offset<UOffset> = Offset(),
+               vectorOfCharacters characters: Offset<UOffset> = Offset()) -> Offset<UOffset> {
+               let start = Movie.startMovie(fbb)
+               Movie.add(mainCharacterType: mainCharacterType, fbb)
+               Movie.add(mainCharacter: mainCharacter, fbb)
+               Movie.addVectorOf(charactersType: charactersType, fbb)
+               Movie.addVectorOf(characters: characters, fbb)
+               return Movie.endMovie(fbb, start: start)
+       }
 }