use arcstr::ArcStr;
use rustc_hash::FxHashMap;
#[derive(Debug, Default)]
pub struct HmrStampTable {
rebuild_seq: u32,
latest: FxHashMap<ArcStr, u32>,
}
impl HmrStampTable {
pub fn begin_rebuild(&mut self) -> u32 {
self.rebuild_seq += 1;
self.rebuild_seq
}
pub fn stamp(&mut self, module_stable_id: &ArcStr, rebuild_seq: u32) {
self.latest.insert(module_stable_id.clone(), rebuild_seq);
}
pub fn render_time_stamp(&self, module_stable_id: &str) -> u32 {
self.latest.get(module_stable_id).copied().unwrap_or(0)
}
pub fn is_stale(&self, module_stable_id: &str, shipped_stamp: u32) -> bool {
self.render_time_stamp(module_stable_id) > shipped_stamp
}
pub fn iter_latest(&self) -> impl Iterator<Item = (&ArcStr, u32)> {
self.latest.iter().map(|(id, stamp)| (id, *stamp))
}
}