jweinst1
7/12/2016 - 4:57 PM

nodes for computing in swift

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
    }
}