use std::io::Write;
pub trait BuildStatsCollector {
#[inline(always)] fn level(&mut self, _input_size: usize, _level_size: usize) {}
#[inline(always)] fn end(&mut self, _remaining_keys: usize) {}
}
impl BuildStatsCollector for () {}
pub struct BuildStatsPrinter<W: Write = std::io::Stdout>(W);
impl BuildStatsPrinter<std::io::Stdout> {
pub fn stdout() -> Self { Self(std::io::stdout()) }
}
impl<W: Write> BuildStatsCollector for BuildStatsPrinter<W> {
fn level(&mut self, input_size: usize, level_size: usize) {
writeln!(self.0, "{} {}", input_size, level_size).unwrap();
}
fn end(&mut self, remaining_keys: usize) {
writeln!(self.0, "Completed {}. {} keys remaining.", if remaining_keys == 0 { "successfully" } else { "unsuccessfully" }, remaining_keys).unwrap();
}
}
pub trait AccessStatsCollector {
#[inline(always)] fn found_on_level(&mut self, _level_nr: usize) {}
#[inline(always)] fn fail_on_level(&mut self, _level_nr: usize) {}
}
impl AccessStatsCollector for () {}
impl AccessStatsCollector for usize {
#[inline(always)] fn found_on_level(&mut self, level_nr: usize) { *self += level_nr + 1; }
#[inline(always)] fn fail_on_level(&mut self, level_nr: usize) { *self += level_nr + 1; }
}