pub struct Seen<Atom: AtomicNumber = AtomicUsize> { /* private fields */ }Expand description
A kind of a bloom filter inspired counter.
May give false positives (since it is aggregated), does not do false negative.
It is used in crate::dedup::Dedup to prevent repeating values (of crate::PotentialPresence for instance).
It achieves interior mutability with atomic numbers so it can be used behind a ref or Arc.
use std::sync::atomic::AtomicU16;
use std::sync::Arc;
use presence::seen::Seen;
let dedup = Arc::new(Seen::<AtomicU16>::builder().build().into_dedup());
assert_eq!(dedup.check(0,b"something"),Ok(true));
assert_eq!(dedup.check(0,b"something"),Ok(false));
assert_eq!(dedup.ease(),Ok(()));
assert_eq!(dedup.check(0,b"something"),Ok(true));Implementations§
Source§impl<Atom: AtomicNumber> Seen<Atom>
impl<Atom: AtomicNumber> Seen<Atom>
pub fn into_dedup<T>(self) -> Dedup<T, Atom>
Source§impl<Atom: AtomicNumber> Seen<Atom>
impl<Atom: AtomicNumber> Seen<Atom>
pub fn builder() -> SeenBuilder<Atom>
Source§impl<Atom: AtomicNumber> Seen<Atom>
impl<Atom: AtomicNumber> Seen<Atom>
Sourcepub fn insert(&self, occurrence: &[u8]) -> Option<usize>
pub fn insert(&self, occurrence: &[u8]) -> Option<usize>
Adds the occurrence to the filter.
Returns true if max occurrences have not been reached (inserted). False if not inserted (maxed).
Sourcepub fn forget_a_bit(&self)
pub fn forget_a_bit(&self)
decrement each counter by one
Sourcepub fn forget_all(&self)
pub fn forget_all(&self)
clear all counters
pub fn size(&self) -> usize
pub fn atoms(&self) -> usize
pub fn counter_per_atom(&self) -> usize
pub fn counters(&self) -> usize
Trait Implementations§
Source§impl<AFrom: AtomicNumber, ATo: AtomicNumber> From<&SeenBuilder<AFrom>> for Seen<ATo>
impl<AFrom: AtomicNumber, ATo: AtomicNumber> From<&SeenBuilder<AFrom>> for Seen<ATo>
Source§fn from(value: &SeenBuilder<AFrom>) -> Self
fn from(value: &SeenBuilder<AFrom>) -> Self
Converts to this type from the input type.
Source§impl<AFrom: AtomicNumber, ATo: AtomicNumber> From<SeenBuilder<AFrom>> for Seen<ATo>
impl<AFrom: AtomicNumber, ATo: AtomicNumber> From<SeenBuilder<AFrom>> for Seen<ATo>
Source§fn from(value: SeenBuilder<AFrom>) -> Self
fn from(value: SeenBuilder<AFrom>) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl<Atom> Freeze for Seen<Atom>
impl<Atom> RefUnwindSafe for Seen<Atom>
impl<Atom> Send for Seen<Atom>
impl<Atom> Sync for Seen<Atom>
impl<Atom> Unpin for Seen<Atom>
impl<Atom> UnwindSafe for Seen<Atom>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more