73 lines
1.9 KiB
Swift
73 lines
1.9 KiB
Swift
import Adwaita
|
|
import CMath
|
|
|
|
struct ViewModel {
|
|
private var numberBuffer: String = ""
|
|
private var number1: Double? = nil
|
|
private var number2: Double? = nil
|
|
private var operand: Operand? = nil
|
|
@State
|
|
private(set) var display: String = ""
|
|
|
|
mutating func clear() {
|
|
numberBuffer = ""
|
|
number1 = nil
|
|
number2 = nil
|
|
operand = 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(_ operand: Operand) {
|
|
guard !numberBuffer.isEmpty && number1 == nil else { return }
|
|
|
|
self.operand = operand
|
|
if number1 == nil { number1 = Double(numberBuffer) }
|
|
else { number2 = Double(numberBuffer) }
|
|
numberBuffer = ""
|
|
|
|
if operand == .sqrt {
|
|
display = String(sqrt(number1!))
|
|
number1 = nil
|
|
self.operand = nil
|
|
}
|
|
}
|
|
|
|
mutating func calculate() {
|
|
number2 = Double(numberBuffer)
|
|
numberBuffer = ""
|
|
|
|
var result: Double = 0.0
|
|
|
|
switch operand {
|
|
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)
|
|
}
|
|
} |