[Swift] Swift implementation 🎉🎉 (#5603)
* Implemented the swift version of Flatbuffers
Implemented serailzing, reading, and mutating data from object monster
Fixes mis-aligned pointer issue
Fixes issue when shared strings are removed from table
Adds swift enum, structs code gen
Fixed namespace issues + started implementing the table gen
Added Mutate function to the code generator
Generated linux test cases
Fixed an issue with bools, and structs readers in table writer
Swift docker image added
Updated the test cases, and removed a method parameters in swift
Fixed createVector api when called with scalars
Fixed issues with scalar arrays, and fixed the code gen namespaces, added sample_binary.swift
Cleaned up project
Added enum vectors, and their readers
Refactored code
Added swift into the support document
Added documentation in docs, and fixed a small issue with Data() not being returned correctly
Fixes Lowercase issue, and prevents generating lookups for deprecated keys
* Made all the required funcs to have const + removed unneeded code + fix lowercase func
* Removed transform from lowercased and moved it to function
* Fixes an issue with iOS allocation from read
* Refactored cpp code to be more readable
* casts position into int for position
* Fix enums issue, moves scalar writer code to use memcpy
* Removed c_str from struct function
* Fixed script to generate new objects when ran on travis ci: fix
* Handles deallocating space allocated for structs
* Updated the test cases to adhere to the fileprivate lookup, no mutation for unions, and updated the names of the vector functions
2020-01-09 20:12:10 +00:00
|
|
|
import Foundation
|
|
|
|
|
|
|
|
/// FlatbufferObject structures all the Flatbuffers objects
|
|
|
|
public protocol FlatBufferObject {
|
2020-02-24 17:27:41 +00:00
|
|
|
var __buffer: ByteBuffer! { get }
|
[Swift] Swift implementation 🎉🎉 (#5603)
* Implemented the swift version of Flatbuffers
Implemented serailzing, reading, and mutating data from object monster
Fixes mis-aligned pointer issue
Fixes issue when shared strings are removed from table
Adds swift enum, structs code gen
Fixed namespace issues + started implementing the table gen
Added Mutate function to the code generator
Generated linux test cases
Fixed an issue with bools, and structs readers in table writer
Swift docker image added
Updated the test cases, and removed a method parameters in swift
Fixed createVector api when called with scalars
Fixed issues with scalar arrays, and fixed the code gen namespaces, added sample_binary.swift
Cleaned up project
Added enum vectors, and their readers
Refactored code
Added swift into the support document
Added documentation in docs, and fixed a small issue with Data() not being returned correctly
Fixes Lowercase issue, and prevents generating lookups for deprecated keys
* Made all the required funcs to have const + removed unneeded code + fix lowercase func
* Removed transform from lowercased and moved it to function
* Fixes an issue with iOS allocation from read
* Refactored cpp code to be more readable
* casts position into int for position
* Fix enums issue, moves scalar writer code to use memcpy
* Removed c_str from struct function
* Fixed script to generate new objects when ran on travis ci: fix
* Handles deallocating space allocated for structs
* Updated the test cases to adhere to the fileprivate lookup, no mutation for unions, and updated the names of the vector functions
2020-01-09 20:12:10 +00:00
|
|
|
init(_ bb: ByteBuffer, o: Int32)
|
|
|
|
}
|
|
|
|
|
2020-04-13 16:28:56 +00:00
|
|
|
public protocol NativeTable {}
|
|
|
|
|
|
|
|
public protocol ObjectAPI {
|
|
|
|
associatedtype T
|
|
|
|
static func pack(_ builder: inout FlatBufferBuilder, obj: inout T) -> Offset<UOffset>
|
|
|
|
mutating func unpack() -> T
|
|
|
|
}
|
|
|
|
|
[Swift] Swift implementation 🎉🎉 (#5603)
* Implemented the swift version of Flatbuffers
Implemented serailzing, reading, and mutating data from object monster
Fixes mis-aligned pointer issue
Fixes issue when shared strings are removed from table
Adds swift enum, structs code gen
Fixed namespace issues + started implementing the table gen
Added Mutate function to the code generator
Generated linux test cases
Fixed an issue with bools, and structs readers in table writer
Swift docker image added
Updated the test cases, and removed a method parameters in swift
Fixed createVector api when called with scalars
Fixed issues with scalar arrays, and fixed the code gen namespaces, added sample_binary.swift
Cleaned up project
Added enum vectors, and their readers
Refactored code
Added swift into the support document
Added documentation in docs, and fixed a small issue with Data() not being returned correctly
Fixes Lowercase issue, and prevents generating lookups for deprecated keys
* Made all the required funcs to have const + removed unneeded code + fix lowercase func
* Removed transform from lowercased and moved it to function
* Fixes an issue with iOS allocation from read
* Refactored cpp code to be more readable
* casts position into int for position
* Fix enums issue, moves scalar writer code to use memcpy
* Removed c_str from struct function
* Fixed script to generate new objects when ran on travis ci: fix
* Handles deallocating space allocated for structs
* Updated the test cases to adhere to the fileprivate lookup, no mutation for unions, and updated the names of the vector functions
2020-01-09 20:12:10 +00:00
|
|
|
/// Readable is structures all the Flatbuffers structs
|
|
|
|
///
|
|
|
|
/// Readable is a procotol that each Flatbuffer struct should confirm to since
|
|
|
|
/// FlatBufferBuilder would require a Type to both create(struct:) and createVector(structs:) functions
|
|
|
|
public protocol Readable: FlatBufferObject {
|
|
|
|
static var size: Int { get }
|
|
|
|
static var alignment: Int { get }
|
|
|
|
}
|
|
|
|
|
|
|
|
public protocol Enum {
|
|
|
|
associatedtype T: Scalar
|
|
|
|
static var byteSize: Int { get }
|
|
|
|
var value: T { get }
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Mutable is a protocol that allows us to mutate Scalar values within the buffer
|
|
|
|
public protocol Mutable {
|
|
|
|
/// makes Flatbuffer accessed within the Protocol
|
|
|
|
var bb: ByteBuffer { get }
|
|
|
|
/// makes position of the table/struct accessed within the Protocol
|
|
|
|
var postion: Int32 { get }
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Mutable {
|
|
|
|
|
|
|
|
/// Mutates the memory in the buffer, this is only called from the access function of table and structs
|
|
|
|
/// - Parameters:
|
|
|
|
/// - value: New value to be inserted to the buffer
|
|
|
|
/// - index: index of the Element
|
|
|
|
func mutate<T: Scalar>(value: T, o: Int32) -> Bool {
|
|
|
|
guard o != 0 else { return false }
|
|
|
|
bb.write(value: value, index: Int(o), direct: true)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Mutable where Self == Table {
|
|
|
|
|
|
|
|
/// Mutates a value by calling mutate with respect to the position in the table
|
|
|
|
/// - Parameters:
|
|
|
|
/// - value: New value to be inserted to the buffer
|
|
|
|
/// - index: index of the Element
|
|
|
|
public func mutate<T: Scalar>(_ value: T, index: Int32) -> Bool {
|
|
|
|
guard index != 0 else { return false }
|
|
|
|
return mutate(value: value, o: index + postion)
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Directly mutates the element by calling mutate
|
|
|
|
///
|
|
|
|
/// Mutates the Element at index ignoring the current position by calling mutate
|
|
|
|
/// - Parameters:
|
|
|
|
/// - value: New value to be inserted to the buffer
|
|
|
|
/// - index: index of the Element
|
|
|
|
public func directMutate<T: Scalar>(_ value: T, index: Int32) -> Bool {
|
|
|
|
return mutate(value: value, o: index)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension Mutable where Self == Struct {
|
|
|
|
|
|
|
|
/// Mutates a value by calling mutate with respect to the position in the struct
|
|
|
|
/// - Parameters:
|
|
|
|
/// - value: New value to be inserted to the buffer
|
|
|
|
/// - index: index of the Element
|
|
|
|
public func mutate<T: Scalar>(_ value: T, index: Int32) -> Bool {
|
|
|
|
return mutate(value: value, o: index + postion)
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Directly mutates the element by calling mutate
|
|
|
|
///
|
|
|
|
/// Mutates the Element at index ignoring the current position by calling mutate
|
|
|
|
/// - Parameters:
|
|
|
|
/// - value: New value to be inserted to the buffer
|
|
|
|
/// - index: index of the Element
|
|
|
|
public func directMutate<T: Scalar>(_ value: T, index: Int32) -> Bool {
|
|
|
|
return mutate(value: value, o: index)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
extension Struct: Mutable {}
|
|
|
|
extension Table: Mutable {}
|