diff options
| -rw-r--r-- | src/input.rs | 35 | ||||
| -rw-r--r-- | src/lib.rs | 5 |
2 files changed, 22 insertions, 18 deletions
diff --git a/src/input.rs b/src/input.rs index 5ffaec8..cc93415 100644 --- a/src/input.rs +++ b/src/input.rs @@ -16,19 +16,7 @@ impl Calculator { return Signal::Exit; } KeyCode::Char(c) => { - if c.is_ascii_digit() { - self.input_buffer.push(c); - } else if c == '.' && !self.input_buffer.contains('.') { - if self.input_buffer.len() == 0 { - self.input_buffer.push('0'); - } - self.input_buffer.push(c); - } else if let Ok(op) = Operator::parse(c) { - if self.input_buffer.len() > 0 { - self.push_buffer_to_stack(); - } - self.perform_operation(op); - } + self.push_to_buffer(c); } KeyCode::Enter if self.input_buffer.len() > 0 => { self.push_buffer_to_stack(); @@ -42,4 +30,25 @@ impl Calculator { } return Signal::None; } + + fn push_to_buffer(&mut self, c: char) { + if c.is_ascii_digit() { + self.input_buffer.push(c); + } else if c == '.' && !self.input_buffer.contains('.') { + if self.input_buffer.len() == 0 { + self.input_buffer.push('0'); + } + self.input_buffer.push(c); + } else if let Ok(op) = Operator::parse(c) { + if self.input_buffer.len() > 0 { + self.push_buffer_to_stack(); + } + self.perform_operation(op); + } + } + + fn push_buffer_to_stack(&mut self) { + self.stack.push(self.input_buffer.parse::<f64>().unwrap()); + self.input_buffer = String::new(); + } } @@ -8,11 +8,6 @@ pub struct Calculator { } impl Calculator { - fn push_buffer_to_stack(&mut self) { - self.stack.push(self.input_buffer.parse::<f64>().unwrap()); - self.input_buffer = String::new(); - } - fn perform_operation(&mut self, op: Operator) { let rhs = match self.stack.pop() { Some(f) => f, |