aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/input.rs35
-rw-r--r--src/lib.rs5
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();
+ }
}
diff --git a/src/lib.rs b/src/lib.rs
index 8bd62ba..951a128 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,