use crate::{MessagePtr, random::Seed, timer::TimerId};
pub type Pid = usize;
pub trait Process {
fn on_start(&mut self, seed: Seed);
fn on_message(&mut self, from: Pid, message: MessagePtr);
fn on_timer(&mut self, id: TimerId);
}
impl<T: Process + ?Sized> Process for Box<T> {
fn on_start(&mut self, seed: Seed) {
(**self).on_start(seed)
}
fn on_message(&mut self, from: Pid, message: MessagePtr) {
(**self).on_message(from, message)
}
fn on_timer(&mut self, id: TimerId) {
(**self).on_timer(id)
}
}
pub(crate) type ProcessPtr = Box<dyn Process + Send>;