#[derive(Debug, Clone, PartialEq, Default)]
pub enum AlgorithmState {
#[default]
Ready,
Running,
Complete,
Error(String),
}
#[derive(Debug, Default)]
pub struct Algorithm {
pub state: AlgorithmState,
pub steps_executed: usize,
pub runtime_ms: u64,
pub is_paused: bool,
}
impl Algorithm {
pub fn new() -> Self {
Self::default()
}
pub fn reset(&mut self) {
self.state = AlgorithmState::Ready;
self.steps_executed = 0;
self.runtime_ms = 0;
self.is_paused = false;
}
pub fn can_step(&self) -> bool {
matches!(self.state, AlgorithmState::Ready | AlgorithmState::Running) && !self.is_paused
}
pub fn complete(&mut self) {
self.state = AlgorithmState::Complete;
}
pub fn start(&mut self) {
self.state = AlgorithmState::Running;
}
pub fn set_error(&mut self, error: String) {
self.state = AlgorithmState::Error(error);
}
pub fn increment_steps(&mut self) {
self.steps_executed += 1;
}
pub fn add_runtime(&mut self, ms: u64) {
self.runtime_ms += ms;
}
pub fn toggle_pause(&mut self) {
self.is_paused = !self.is_paused;
}
}