mod clock;
pub(crate) mod core;
mod fault;
pub(crate) mod scalable;
pub(crate) mod seq;
use crate::jiffy::Jiffies;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CompleteStatus {
Completed { steps: usize },
TimeBudgetExhausted { steps: usize },
NoMoreEvents { steps: usize },
}
impl CompleteStatus {
pub fn steps(&self) -> usize {
match *self {
CompleteStatus::Completed { steps }
| CompleteStatus::TimeBudgetExhausted { steps }
| CompleteStatus::NoMoreEvents { steps } => steps,
}
}
}
pub trait SimulationRunner {
fn run_full_budget(&mut self) -> CompleteStatus;
fn run_steps(&mut self, k: usize) -> CompleteStatus;
fn run_sub_budget(&mut self, sub_budget: Jiffies) -> CompleteStatus;
}
impl SimulationRunner for Box<dyn SimulationRunner> {
fn run_full_budget(&mut self) -> CompleteStatus {
(**self).run_full_budget()
}
fn run_steps(&mut self, k: usize) -> CompleteStatus {
(**self).run_steps(k)
}
fn run_sub_budget(&mut self, sub_budget: Jiffies) -> CompleteStatus {
(**self).run_sub_budget(sub_budget)
}
}