Code cleanup
This commit is contained in:
parent
9bd0e72fbc
commit
d81fb1f45d
30
src/calc.rs
30
src/calc.rs
@ -8,7 +8,7 @@ use constants::{
|
||||
CalculatorState, RegisterState,
|
||||
};
|
||||
use errors::{CalculatorError, CalculatorResult};
|
||||
use operations::{CalculatorOperation, MacroState};
|
||||
use operations::{CalculatorOperation, CalculatorStateChange, MacroState, OpArgs};
|
||||
use std::collections::{HashSet, VecDeque};
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
@ -17,20 +17,6 @@ enum HistoryMode {
|
||||
Macro,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
enum OpArgs {
|
||||
Macro(MacroState),
|
||||
Unary(f64),
|
||||
Binary([f64; 2]),
|
||||
None,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
struct CalculatorStateChange {
|
||||
pop: OpArgs,
|
||||
push: OpArgs,
|
||||
}
|
||||
|
||||
impl CalculatorStateChange {
|
||||
pub fn is_noop(&self) -> bool {
|
||||
self.push == OpArgs::None && self.pop == OpArgs::None
|
||||
@ -316,6 +302,9 @@ impl<'a> Calculator<'a> {
|
||||
pub fn get_registers_iter(&self) -> CalculatorRegistersIter {
|
||||
self.registers.iter()
|
||||
}
|
||||
pub fn get_stack(&self) -> &VecDeque<f64> {
|
||||
&self.stack
|
||||
}
|
||||
|
||||
pub fn flush_l(&mut self) -> CalculatorResult<bool> {
|
||||
if self.l.is_empty() {
|
||||
@ -330,6 +319,7 @@ impl<'a> Calculator<'a> {
|
||||
fn within_macro(&self) -> bool {
|
||||
!self.active_macros.is_empty()
|
||||
}
|
||||
|
||||
fn push(&mut self, f: f64) -> CalculatorResult<()> {
|
||||
self.direct_state_change(CalculatorStateChange {
|
||||
pop: OpArgs::None,
|
||||
@ -344,9 +334,6 @@ impl<'a> Calculator<'a> {
|
||||
})?;
|
||||
Ok(f)
|
||||
}
|
||||
pub fn get_stack(&self) -> &VecDeque<f64> {
|
||||
&self.stack
|
||||
}
|
||||
pub fn op(&mut self, op: CalculatorOperation) -> CalculatorResult<()> {
|
||||
// Dup is special -- don't actually run it if l needs to be flushed
|
||||
if self.flush_l()? {
|
||||
@ -529,13 +516,6 @@ impl<'a> Calculator<'a> {
|
||||
OpArgs::Binary([a, b]) => {
|
||||
self.stack_eq(0, *a)?;
|
||||
self.stack_eq(1, *b)?;
|
||||
// if forward {
|
||||
// self.stack_eq(0, *a)?;
|
||||
// self.stack_eq(1, *b)?;
|
||||
// } else {
|
||||
// self.stack_eq(0, *a)?;
|
||||
// self.stack_eq(1, *b)?;
|
||||
// }
|
||||
self.stack.pop_front();
|
||||
self.stack.pop_front();
|
||||
}
|
||||
|
@ -35,3 +35,17 @@ pub enum CalculatorOperation {
|
||||
E,
|
||||
Macro(MacroState),
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum OpArgs {
|
||||
Macro(MacroState),
|
||||
Unary(f64),
|
||||
Binary([f64; 2]),
|
||||
None,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct CalculatorStateChange {
|
||||
pub pop: OpArgs,
|
||||
pub push: OpArgs,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user