use lru::LruCache;
use parking_lot::Mutex;
use peashape::ID_SIZE;
pub(crate) struct GossipState {
seen: Mutex<LruCache<[u8; ID_SIZE], ()>>,
}
impl GossipState {
pub(crate) fn new(dedup_capacity: usize) -> Self {
Self {
seen: Mutex::new(LruCache::new(
std::num::NonZeroUsize::new(dedup_capacity)
.expect("dedup_capacity must be non-zero"),
)),
}
}
pub(crate) fn check_and_record(&self, id: &[u8; ID_SIZE]) -> bool {
let mut seen = self.seen.lock();
if seen.contains(id) {
return false;
}
seen.put(*id, ());
true
}
}