import Adwaita import CMath struct ViewModel { private var numberBuffer: String = "" private var number1: Double? = nil private var number2: Double? = nil private var op: Operator? = nil @State private(set) var display: String = "" mutating func clear() { numberBuffer = "" number1 = nil number2 = nil op = nil display = "" } mutating func addComma() { guard !numberBuffer.isEmpty else { return } numberBuffer.append(",") display = numberBuffer } mutating func addNumber(_ number: UInt8) { if numberBuffer.isEmpty { display = "" } // Reset display after new number is added to cleared buffer numberBuffer.append(String(number)) display = numberBuffer } mutating func operation(_ op: Operator) { guard !numberBuffer.isEmpty && number1 == nil else { return } self.op = op if number1 == nil { number1 = Double(numberBuffer) } else { number2 = Double(numberBuffer) } numberBuffer = "" if op == .sqrt { display = String(sqrt(number1!)) number1 = nil self.op = nil } } mutating func calculate() { number2 = Double(numberBuffer) numberBuffer = "" var result: Double = 0.0 switch op { case .add: result = add_nums(number1!, number2!) case .sub: result = sub_nums(number1!, number2!) case .mul: result = mul_nums(number1!, number2!) case .div: result = div_nums(number1!, number2!) case .pow: result = pow(number1!, number2!) case .sqrt, .none: // do nothing print("Attempting to apply Square Root to nothing!") } display = String(result) } }