pub(crate) mod alloc;
#[cfg_attr(docsrs, doc(cfg(feature = "branch_predictor")))]
#[cfg(feature = "branch_predictor")]
mod bpu_trasher;
mod cache_trasher;
mod perf_counter;
pub mod events;
use rustc_hash::FxHashMap;
pub use alloc::*;
pub use cache_trasher::*;
pub use events::*;
pub use perf_counter::*;
#[cfg_attr(docsrs, doc(cfg(feature = "branch_predictor")))]
#[cfg(feature = "branch_predictor")]
pub use bpu_trasher::*;
use crate::BenchId;
pub struct PerBenchData<T> {
per_bench_data: FxHashMap<BenchId, T>,
}
impl<T> Default for PerBenchData<T> {
fn default() -> Self {
Self::new()
}
}
impl<T> PerBenchData<T> {
pub fn new() -> Self {
Self {
per_bench_data: FxHashMap::default(),
}
}
pub fn get_mut(&mut self, bench_id: &BenchId) -> Option<&mut T> {
self.per_bench_data.get_mut(bench_id)
}
pub fn get(&self, bench_id: &BenchId) -> Option<&T> {
self.per_bench_data.get(bench_id)
}
pub fn insert_if_absent<F: FnOnce() -> T>(&mut self, bench_id: &BenchId, data: F) {
if !self.per_bench_data.contains_key(bench_id) {
self.per_bench_data.insert(bench_id.clone(), data());
}
}
}