nodes for computing in swift
//basic node to facilitate computation
class ComputationNode {
var intA:Int?
var intB:Int?
var stringA:String?
var stringB:String?
var boolA:Bool?
var boolB:Bool?
var proc:((inout ComputationNode) -> Void)?
var cond:((inout ComputationNode) -> Bool)?
var truenode:ComputationNode?
var falsenode:ComputationNode?
}
//cached proc funcs
struct Procs {
static func addA(amount:Int) -> ((inout node:ComputationNode) ->Void) {
return {(inout node:ComputationNode) in node.intA! += amount}
}
static let intprocs = [
"+a1":Procs.addA
]
}
struct Conds {
//checks if the A register for ints is equal to zero
static func isZeroA() -> ((inout node:ComputationNode) ->Bool) {
return {(inout node:ComputationNode) in node.intA == 0}
}
static let conds = [
"a=0":Conds.isZeroA
]
}
struct NodeUtils {
static func parseNode(code:String) -> ComputationNode {
guard code.characters.first! == "{" && code.characters.last! == "}" else {
print("Invalid Node")
return ComputationNode()
}
let pieces = String(code.characters.dropLast().dropFirst()).componentsSeparatedByString(";")
var newnode = ComputationNode()
newnode.intA = Int(pieces[0])!
newnode.intB = Int(pieces[1])!
return newnode
}
}