use super::*;
pub(crate) fn cache_snapshot(
fitness_cache: &Option<Arc<std::sync::Mutex<crate::fitness::cache::FitnessCache>>>,
) -> Result<(u64, u64), GaError> {
match fitness_cache {
Some(ch) => {
let c = ch
.lock()
.map_err(|_| GaError::InternalError("fitness cache mutex poisoned".to_string()))?;
Ok((c.hits(), c.misses()))
}
None => Ok((0, 0)),
}
}
pub(crate) fn cache_fill_stats(
fitness_cache: &Option<Arc<std::sync::Mutex<crate::fitness::cache::FitnessCache>>>,
gen_stats: &mut GenerationStats,
prev_hits: u64,
prev_misses: u64,
) -> Result<(), GaError> {
if let Some(ref ch) = fitness_cache {
let c = ch
.lock()
.map_err(|_| GaError::InternalError("fitness cache mutex poisoned".to_string()))?;
gen_stats.cache_hits = Some(c.hits().saturating_sub(prev_hits));
gen_stats.cache_misses = Some(c.misses().saturating_sub(prev_misses));
}
Ok(())
}