From 676e90b57e3a7fe96aa393c59a897bccff0ab8ec Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Thu, 9 Feb 2023 10:17:46 -0330 Subject: sin function --- src/input.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/input.rs') diff --git a/src/input.rs b/src/input.rs index 998d380..4aae623 100644 --- a/src/input.rs +++ b/src/input.rs @@ -39,9 +39,7 @@ impl Calculator { } 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 c == '.' && !self.input_buffer.contains('.') { if self.input_buffer.len() == 0 { self.input_buffer.push('0'); } @@ -49,14 +47,25 @@ impl Calculator { } else if let Ok(op) = Operator::parse(c) { self.push_buffer_to_stack(); self.perform_operation(op); + } else { + self.input_buffer.push(c); } } fn push_buffer_to_stack(&mut self) { - if self.input_buffer.len() > 0 { - self.stack.push(self.input_buffer.parse::().unwrap()); - self.input_buffer = String::new(); + match self.input_buffer.as_str() { + "sin" => { + if let Some(f) = self.stack.last_mut() { + *f = f.sin(); + } + } + _ => { + if self.input_buffer.len() > 0 { + self.stack.push(self.input_buffer.parse::().unwrap()); + } + } } + self.input_buffer = String::new(); } fn swap(&mut self) { -- cgit v1.2.3