pub struct BloomFilter<T, B = SipHasherBuilder> { /* private fields */ }Expand description
A space-efficient probabilistic data structure to test for membership in a set.
At its core, a bloom filter is a bit array, initially all set to zero. K hash functions
map each element to K bits in the bit array. An element definitely does not exist in the
bloom filter if any of the K bits are unset. An element is possibly in the set if all of the
K bits are set. This particular implementation of a bloom filter uses two hash functions to
simulate K hash functions. Additionally, it operates on only one “slice” in order to have
predictable memory usage.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let mut filter = BloomFilter::<String>::new(10, 0.01);
assert!(!filter.contains("foo"));
filter.insert("foo");
assert!(filter.contains("foo"));
filter.clear();
assert!(!filter.contains("foo"));
assert_eq!(filter.len(), 96);
assert_eq!(filter.hasher_count(), 7);Implementations§
Source§impl<T> BloomFilter<T>
impl<T> BloomFilter<T>
Sourcepub fn new(item_count: usize, fpp: f64) -> Self
pub fn new(item_count: usize, fpp: f64) -> Self
Constructs a new, empty BloomFilter with an estimated max capacity of item_count items,
and a maximum false positive probability of fpp.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let filter = BloomFilter::<String>::new(10, 0.01);Sourcepub fn from_item_count(bit_count: usize, item_count: usize) -> Self
pub fn from_item_count(bit_count: usize, item_count: usize) -> Self
Constructs a new, empty BloomFilter with bit_count bits, and an estimated max capacity
of item_count items.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let filter = BloomFilter::<String>::from_item_count(100, 10);Source§impl<T, B> BloomFilter<T, B>where
B: BuildHasher,
impl<T, B> BloomFilter<T, B>where
B: BuildHasher,
Sourcepub fn with_hashers(item_count: usize, fpp: f64, hash_builders: [B; 2]) -> Self
pub fn with_hashers(item_count: usize, fpp: f64, hash_builders: [B; 2]) -> Self
Constructs a new, empty BloomFilter with an estimated max capacity of item_count items,
a maximum false positive probability of fpp, and two hasher builders for double hashing.
§Examples
use probabilistic_collections::bloom::BloomFilter;
use probabilistic_collections::SipHasherBuilder;
let filter = BloomFilter::<String>::with_hashers(
10,
0.01,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);Sourcepub fn from_item_count_with_hashers(
bit_count: usize,
item_count: usize,
hash_builders: [B; 2],
) -> Self
pub fn from_item_count_with_hashers( bit_count: usize, item_count: usize, hash_builders: [B; 2], ) -> Self
Constructs a new, empty BloomFilter with bit_count bits, an estimated max capacity
of item_count items, and two hasher builders for double hashing.
§Examples
use probabilistic_collections::bloom::BloomFilter;
use probabilistic_collections::SipHasherBuilder;
let filter = BloomFilter::<String>::from_item_count_with_hashers(
100,
10,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);Sourcepub fn from_fpp_with_hashers(
bit_count: usize,
fpp: f64,
hash_builders: [B; 2],
) -> Self
pub fn from_fpp_with_hashers( bit_count: usize, fpp: f64, hash_builders: [B; 2], ) -> Self
Constructs a new, empty BloomFilter with bit_count bits, a maximum false positive
probability of fpp, and two hasher builders for double hashing.
§Examples
use probabilistic_collections::bloom::BloomFilter;
use probabilistic_collections::SipHasherBuilder;
let filter = BloomFilter::<String>::from_fpp_with_hashers(
100,
0.01,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);Sourcepub fn insert<U>(&mut self, item: &U)
pub fn insert<U>(&mut self, item: &U)
Inserts an element into the bloom filter.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let mut filter = BloomFilter::<String>::new(10, 0.01);
filter.insert("foo");Sourcepub fn contains<U>(&self, item: &U) -> bool
pub fn contains<U>(&self, item: &U) -> bool
Checks if an element is possibly in the bloom filter.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let mut filter = BloomFilter::<String>::new(10, 0.01);
assert!(!filter.contains("foo"));
filter.insert("foo");
assert!(filter.contains("foo"));Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of bits in the bloom filter.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let filter = BloomFilter::<String>::from_fpp(100, 0.01);
assert_eq!(filter.len(), 100);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the bloom filter is empty.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let filter = BloomFilter::<String>::from_fpp(100, 0.01);
assert!(!filter.is_empty());Sourcepub fn hasher_count(&self) -> usize
pub fn hasher_count(&self) -> usize
Returns the number of hash functions used by the bloom filter.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let filter = BloomFilter::<String>::new(10, 0.01);
assert_eq!(filter.hasher_count(), 7);Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the bloom filter, removing all elements.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let mut filter = BloomFilter::<String>::new(10, 0.01);
filter.insert("foo");
filter.clear();
assert!(!filter.contains("foo"));Sourcepub fn count_ones(&self) -> usize
pub fn count_ones(&self) -> usize
Returns the number of set bits in the bloom filter.
§Examples
use probabilistic_collections::bloom::BloomFilter;
use probabilistic_collections::SipHasherBuilder;
let mut filter = BloomFilter::<String>::from_fpp_with_hashers(
100,
0.01,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);
filter.insert("foo");
assert_eq!(filter.count_ones(), 7);Sourcepub fn count_zeros(&self) -> usize
pub fn count_zeros(&self) -> usize
Returns the number of unset bits in the bloom filter.
§Examples
use probabilistic_collections::bloom::BloomFilter;
use probabilistic_collections::SipHasherBuilder;
let mut filter = BloomFilter::<String>::from_fpp_with_hashers(
100,
0.01,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);
filter.insert("foo");
assert_eq!(filter.count_zeros(), 93);Sourcepub fn estimated_fpp(&self) -> f64
pub fn estimated_fpp(&self) -> f64
Returns the estimated false positive probability of the bloom filter. This value will increase as more items are added.
§Examples
use probabilistic_collections::bloom::BloomFilter;
let mut filter = BloomFilter::<String>::new(100, 0.01);
assert!(filter.estimated_fpp() < std::f64::EPSILON);
filter.insert("foo");
assert!(filter.estimated_fpp() > std::f64::EPSILON);
assert!(filter.estimated_fpp() < 0.01);