use crate::factor::VarStore; /// Reusable scratch buffers for `Game::likelihoods`. /// /// A `Batch` owns one arena; all events in the slice share it across /// the convergence iterations. #[derive(Debug, Default)] pub struct ScratchArena { pub(crate) vars: VarStore, pub(crate) sort_buf: Vec, } impl ScratchArena { pub fn new() -> Self { Self::default() } #[inline] pub(crate) fn reset(&mut self) { self.vars.clear(); self.sort_buf.clear(); } } #[cfg(test)] mod tests { use super::*; use crate::{N_INF, gaussian::Gaussian}; #[test] fn reset_keeps_capacity() { let mut arena = ScratchArena::new(); arena.vars.alloc(N_INF); arena.sort_buf.push(42); let var_cap = arena.vars.marginals.capacity(); let sort_cap = arena.sort_buf.capacity(); arena.reset(); assert_eq!(arena.vars.len(), 0); assert_eq!(arena.sort_buf.len(), 0); assert_eq!(arena.vars.marginals.capacity(), var_cap); assert_eq!(arena.sort_buf.capacity(), sort_cap); } }