pub struct Simulator<M: AbstractSimulator> { /* private fields */ }
Expand description
A DEVS simulator.
Implementations§
Source§impl<M: AbstractSimulator> Simulator<M>
impl<M: AbstractSimulator> Simulator<M>
Sourcepub fn simulate_rt(
&mut self,
config: &Config,
wait_until: impl FnMut(f64, f64, &mut M::Input) -> f64,
propagate_output: impl FnMut(&M::Output),
)
pub fn simulate_rt( &mut self, config: &Config, wait_until: impl FnMut(f64, f64, &mut M::Input) -> f64, propagate_output: impl FnMut(&M::Output), )
It executes the simulation of the inner DEVS model from t_start
to t_stop
.
It provides support for real time execution via the following arguments:
-
wait_until
: a closure that is called between state transitions. It receives the current time, the time of the next state transition and a mutable reference to the input ports. It returns the actual time “waited”. If the returned time is equal to the input time, an internal/confluent state transition is performed. Otherwise, it assumes that an external event happened and executes the external transition function. -
propagate_output
: a closure that is called after output functions. It receives a mutable reference to the output ports so the closure can access to output events.
Sourcepub fn simulate_vt(&mut self, config: &Config)
pub fn simulate_vt(&mut self, config: &Config)
It executes the simulation of the inner DEVS model from t_start
to t_stop
.
It uses a virtual clock (i.e., no real time is used).
Sourcepub async fn simulate_rt_async(
&mut self,
config: &Config,
input_handler: impl AsyncInput<Input = M::Input>,
propagate_output: impl FnMut(&M::Output),
)
pub async fn simulate_rt_async( &mut self, config: &Config, input_handler: impl AsyncInput<Input = M::Input>, propagate_output: impl FnMut(&M::Output), )
Asynchronous version of the simulate_rt
method.
The main difference is that the wait_until
function has been replaced with an
AsyncInput
trait, which allows for asynchronous handling of input events.