sim/input_modeling/
dynamic_rng.rs

1use std::{cell::RefCell, rc::Rc};
2
3pub trait SimulationRng: std::fmt::Debug + rand_core::RngCore {}
4impl<T: std::fmt::Debug + rand_core::RngCore> SimulationRng for T {}
5pub type DynRng = Rc<RefCell<dyn SimulationRng>>;
6
7pub(crate) fn default_rng() -> DynRng {
8    Rc::new(RefCell::new(rand_pcg::Pcg64Mcg::new(42)))
9}
10
11pub fn dyn_rng<Rng: SimulationRng + 'static>(rng: Rng) -> DynRng {
12    Rc::new(RefCell::new(rng))
13}
14
15pub fn some_dyn_rng<Rng: SimulationRng + 'static>(rng: Rng) -> Option<DynRng> {
16    Some(dyn_rng(rng))
17}