diff --git a/samples/monster_generated.swift b/samples/monster_generated.swift index 93f958712..c2535937c 100644 --- a/samples/monster_generated.swift +++ b/samples/monster_generated.swift @@ -4,7 +4,7 @@ import FlatBuffers -public enum MyGame_Sample_Color: Int8, Enum { +public enum MyGame_Sample_Color: Int8, Enum { public typealias T = Int8 public static var byteSize: Int { return MemoryLayout.size } public var value: Int8 { return self.rawValue } @@ -17,7 +17,7 @@ public enum MyGame_Sample_Color: Int8, Enum { public static var min: MyGame_Sample_Color { return .red } } -public enum MyGame_Sample_Equipment: UInt8, Enum { +public enum MyGame_Sample_Equipment: UInt8, Enum { public typealias T = UInt8 public static var byteSize: Int { return MemoryLayout.size } public var value: UInt8 { return self.rawValue } @@ -113,7 +113,7 @@ public struct MyGame_Sample_Monster: FlatBufferObject { public var weaponsCount: Int32 { let o = _accessor.offset(VTOFFSET.weapons.v); return o == 0 ? 0 : _accessor.vector(count: o) } public func weapons(at index: Int32) -> MyGame_Sample_Weapon? { let o = _accessor.offset(VTOFFSET.weapons.v); return o == 0 ? nil : MyGame_Sample_Weapon(_accessor.bb, o: _accessor.indirect(_accessor.vector(at: o) + index * 4)) } public var equippedType: MyGame_Sample_Equipment { let o = _accessor.offset(VTOFFSET.equippedType.v); return o == 0 ? .none_ : MyGame_Sample_Equipment(rawValue: _accessor.readBuffer(of: UInt8.self, at: o)) ?? .none_ } - public func equipped(type: T.Type) -> T? { let o = _accessor.offset(VTOFFSET.equipped.v); return o == 0 ? nil : _accessor.union(o) } + public func equipped(type: T.Type) -> T? { let o = _accessor.offset(VTOFFSET.equipped.v); return o == 0 ? nil : _accessor.union(o) } public var pathCount: Int32 { let o = _accessor.offset(VTOFFSET.path.v); return o == 0 ? 0 : _accessor.vector(count: o) } public func path(at index: Int32) -> MyGame_Sample_Vec3? { let o = _accessor.offset(VTOFFSET.path.v); return o == 0 ? nil : _accessor.directRead(of: MyGame_Sample_Vec3.self, offset: _accessor.vector(at: o) + index * 12) } public func mutablePath(at index: Int32) -> MyGame_Sample_Vec3_Mutable? { let o = _accessor.offset(VTOFFSET.path.v); return o == 0 ? nil : MyGame_Sample_Vec3_Mutable(_accessor.bb, o: _accessor.vector(at: o) + index * 12) } @@ -121,30 +121,30 @@ public struct MyGame_Sample_Monster: FlatBufferObject { public static func add(pos: MyGame_Sample_Vec3?, _ fbb: inout FlatBufferBuilder) { guard let pos = pos else { return }; fbb.create(struct: pos, position: VTOFFSET.pos.p) } public static func add(mana: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: mana, def: 150, at: VTOFFSET.mana.p) } public static func add(hp: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: hp, def: 100, at: VTOFFSET.hp.p) } - public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) } - public static func addVectorOf(inventory: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: inventory, at: VTOFFSET.inventory.p) } + public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) } + public static func addVectorOf(inventory: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: inventory, at: VTOFFSET.inventory.p) } public static func add(color: MyGame_Sample_Color, _ fbb: inout FlatBufferBuilder) { fbb.add(element: color.rawValue, def: 2, at: VTOFFSET.color.p) } - public static func addVectorOf(weapons: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: weapons, at: VTOFFSET.weapons.p) } + public static func addVectorOf(weapons: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: weapons, at: VTOFFSET.weapons.p) } public static func add(equippedType: MyGame_Sample_Equipment, _ fbb: inout FlatBufferBuilder) { fbb.add(element: equippedType.rawValue, def: 0, at: VTOFFSET.equippedType.p) } - public static func add(equipped: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: equipped, at: VTOFFSET.equipped.p) } - public static func addVectorOf(path: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: path, at: VTOFFSET.path.p) } + public static func add(equipped: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: equipped, at: VTOFFSET.equipped.p) } + public static func addVectorOf(path: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: path, at: VTOFFSET.path.p) } public static func startVectorOfPath(_ size: Int, in builder: inout FlatBufferBuilder) { builder.startVector(size * MemoryLayout.size, elementSize: MemoryLayout.alignment) } - public static func endMonster(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } + public static func endMonster(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } public static func createMonster( _ fbb: inout FlatBufferBuilder, pos: MyGame_Sample_Vec3? = nil, mana: Int16 = 150, hp: Int16 = 100, - nameOffset name: Offset = Offset(), - inventoryVectorOffset inventory: Offset = Offset(), + nameOffset name: Offset = Offset(), + inventoryVectorOffset inventory: Offset = Offset(), color: MyGame_Sample_Color = .blue, - weaponsVectorOffset weapons: Offset = Offset(), + weaponsVectorOffset weapons: Offset = Offset(), equippedType: MyGame_Sample_Equipment = .none_, - equippedOffset equipped: Offset = Offset(), - pathVectorOffset path: Offset = Offset() - ) -> Offset { + equippedOffset equipped: Offset = Offset(), + pathVectorOffset path: Offset = Offset() + ) -> Offset { let __start = MyGame_Sample_Monster.startMonster(&fbb) MyGame_Sample_Monster.add(pos: pos, &fbb) MyGame_Sample_Monster.add(mana: mana, &fbb) @@ -183,14 +183,14 @@ public struct MyGame_Sample_Weapon: FlatBufferObject { public var damage: Int16 { let o = _accessor.offset(VTOFFSET.damage.v); return o == 0 ? 0 : _accessor.readBuffer(of: Int16.self, at: o) } @discardableResult public func mutate(damage: Int16) -> Bool {let o = _accessor.offset(VTOFFSET.damage.v); return _accessor.mutate(damage, index: o) } public static func startWeapon(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb.startTable(with: 2) } - public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) } + public static func add(name: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add(offset: name, at: VTOFFSET.name.p) } public static func add(damage: Int16, _ fbb: inout FlatBufferBuilder) { fbb.add(element: damage, def: 0, at: VTOFFSET.damage.p) } - public static func endWeapon(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } + public static func endWeapon(_ fbb: inout FlatBufferBuilder, start: UOffset) -> Offset { let end = Offset(offset: fbb.endTable(at: start)); return end } public static func createWeapon( _ fbb: inout FlatBufferBuilder, - nameOffset name: Offset = Offset(), + nameOffset name: Offset = Offset(), damage: Int16 = 0 - ) -> Offset { + ) -> Offset { let __start = MyGame_Sample_Weapon.startWeapon(&fbb) MyGame_Sample_Weapon.add(name: name, &fbb) MyGame_Sample_Weapon.add(damage: damage, &fbb) diff --git a/swift/Sources/FlatBuffers/ByteBuffer.swift b/swift/Sources/FlatBuffers/ByteBuffer.swift index 4d32d78e8..b301e02e7 100644 --- a/swift/Sources/FlatBuffers/ByteBuffer.swift +++ b/swift/Sources/FlatBuffers/ByteBuffer.swift @@ -16,6 +16,7 @@ import Foundation +@frozen public struct ByteBuffer { /// Storage is a container that would hold the memory pointer to solve the issue of @@ -29,12 +30,14 @@ public struct ByteBuffer { /// Capacity of UInt8 the buffer can hold var capacity: Int + @usableFromInline init(count: Int, alignment: Int) { memory = UnsafeMutableRawPointer.allocate(byteCount: count, alignment: alignment) capacity = count unowned = false } + @usableFromInline init(memory: UnsafeMutableRawPointer, capacity: Int, unowned: Bool) { self.memory = memory self.capacity = capacity @@ -47,6 +50,7 @@ public struct ByteBuffer { } } + @usableFromInline func copy(from ptr: UnsafeRawPointer, count: Int) { assert( !unowned, @@ -54,6 +58,7 @@ public struct ByteBuffer { memory.copyMemory(from: ptr, byteCount: count) } + @usableFromInline func initialize(for size: Int) { assert( !unowned, diff --git a/swift/Sources/FlatBuffers/FlatBufferBuilder.swift b/swift/Sources/FlatBuffers/FlatBufferBuilder.swift index 206603fe1..9a166bac7 100644 --- a/swift/Sources/FlatBuffers/FlatBufferBuilder.swift +++ b/swift/Sources/FlatBuffers/FlatBufferBuilder.swift @@ -16,6 +16,7 @@ import Foundation +@frozen public struct FlatBufferBuilder { /// Storage for the Vtables used in the buffer are stored in here, so they would be written later in EndTable @@ -532,6 +533,7 @@ extension FlatBufferBuilder: CustomDebugStringConvertible { var addedElements: Int { capacity - (numOfFields &* size) } /// Creates the memory to store the buffer in + @usableFromInline init() { memory = UnsafeMutableRawBufferPointer.allocate(byteCount: 0, alignment: 0) } diff --git a/swift/Sources/FlatBuffers/Struct.swift b/swift/Sources/FlatBuffers/Struct.swift index 75e5f9771..0b546d9d4 100644 --- a/swift/Sources/FlatBuffers/Struct.swift +++ b/swift/Sources/FlatBuffers/Struct.swift @@ -16,6 +16,7 @@ import Foundation +@frozen public struct Struct { public private(set) var bb: ByteBuffer public private(set) var postion: Int32 diff --git a/swift/Sources/FlatBuffers/Table.swift b/swift/Sources/FlatBuffers/Table.swift index e5842aa13..7c1855590 100644 --- a/swift/Sources/FlatBuffers/Table.swift +++ b/swift/Sources/FlatBuffers/Table.swift @@ -16,6 +16,7 @@ import Foundation +@frozen public struct Table { public private(set) var bb: ByteBuffer public private(set) var postion: Int32 @@ -113,9 +114,6 @@ public struct Table { o += postion return o + bb.read(def: Int32.self, position: Int(o)) + 4 } -} - -extension Table { static public func indirect(_ o: Int32, _ fbb: ByteBuffer) -> Int32 { o + fbb.read( def: Int32.self,