pub struct PartitionedBloomFilter<T, B = SipHasherBuilder> { /* private fields */ }Expand description
A space-efficient probabilistic data structure to test for membership in a set.
This particular implementation of a bloom filter uses K partitions and K hash functions.
Each hash function maps to a bit in its respective partition. A partitioned bloom filter is
more robust than its traditional counterpart, but the memory usage is varies based on how many
hash functions you are using.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
let mut filter = PartitionedBloomFilter::<String>::from_item_count(10, 0.01);
assert!(!filter.contains("foo"));
filter.insert("foo");
assert!(filter.contains("foo"));
filter.clear();
assert!(!filter.contains("foo"));
assert_eq!(filter.len(), 98);
assert_eq!(filter.bit_count(), 14);
assert_eq!(filter.hasher_count(), 7);Implementations§
Source§impl<T> PartitionedBloomFilter<T>
impl<T> PartitionedBloomFilter<T>
Sourcepub fn from_item_count(item_count: usize, fpp: f64) -> Self
pub fn from_item_count(item_count: usize, fpp: f64) -> Self
Constructs a new, empty PartitionedBloomFilter with an estimated max capacity of
item_count items, and a maximum false positive probability of fpp.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
let filter = PartitionedBloomFilter::<String>::from_item_count(10, 0.01);Sourcepub fn from_bit_count(bit_count: usize, fpp: f64) -> Self
pub fn from_bit_count(bit_count: usize, fpp: f64) -> Self
Constructs a new, empty PartitionedBloomFilter with bit_count bits per partition, and a
maximum false positive probability of fpp.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
let filter = PartitionedBloomFilter::<String>::from_bit_count(10, 0.01);Source§impl<T, B> PartitionedBloomFilter<T, B>where
B: BuildHasher,
impl<T, B> PartitionedBloomFilter<T, B>where
B: BuildHasher,
Sourcepub fn from_item_count_with_hashers(
item_count: usize,
fpp: f64,
hash_builders: [B; 2],
) -> Self
pub fn from_item_count_with_hashers( item_count: usize, fpp: f64, hash_builders: [B; 2], ) -> Self
Constructs a new, empty PartitionedBloomFilter with an estimated max capacity of
item_count items, a maximum false positive probability of fpp, and two hash builders
for double hashing.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
use probabilistic_collections::SipHasherBuilder;
let filter = PartitionedBloomFilter::<String>::from_item_count_with_hashers(
10,
0.01,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);Sourcepub fn from_bit_count_with_hashers(
bit_count: usize,
fpp: f64,
hash_builders: [B; 2],
) -> Self
pub fn from_bit_count_with_hashers( bit_count: usize, fpp: f64, hash_builders: [B; 2], ) -> Self
Constructs a new, empty PartitionedBloomFilter with bit_count bits per partition, a
maximum false positive probability of fpp, and two hash builders for double hashing.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
use probabilistic_collections::SipHasherBuilder;
let filter = PartitionedBloomFilter::<String>::from_bit_count_with_hashers(
10,
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::PartitionedBloomFilter;
let mut filter = PartitionedBloomFilter::<String>::from_item_count(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::PartitionedBloomFilter;
let mut filter = PartitionedBloomFilter::<String>::from_item_count(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::PartitionedBloomFilter;
let filter = PartitionedBloomFilter::<String>::from_item_count(10, 0.01);
assert_eq!(filter.len(), 98);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::PartitionedBloomFilter;
let filter = PartitionedBloomFilter::<String>::from_item_count(10, 0.01);
assert!(!filter.is_empty());Sourcepub fn bit_count(&self) -> usize
pub fn bit_count(&self) -> usize
Returns the number of bits in each partition in the bloom filter.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
let filter = PartitionedBloomFilter::<String>::from_item_count(10, 0.01);
assert_eq!(filter.bit_count(), 14);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::PartitionedBloomFilter;
let filter = PartitionedBloomFilter::<String>::from_item_count(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::PartitionedBloomFilter;
let mut filter = PartitionedBloomFilter::<String>::from_item_count(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::PartitionedBloomFilter;
use probabilistic_collections::SipHasherBuilder;
let mut filter = PartitionedBloomFilter::<String>::from_item_count_with_hashers(
10,
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::PartitionedBloomFilter;
use probabilistic_collections::SipHasherBuilder;
let mut filter = PartitionedBloomFilter::<String>::from_item_count_with_hashers(
10,
0.01,
[SipHasherBuilder::from_seed(0, 0), SipHasherBuilder::from_seed(1, 1)],
);
filter.insert("foo");
assert_eq!(filter.count_zeros(), 91);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.
This is a fairly rough estimate as it takes the overall fill ratio of all partitions instead of considering each partition individually.
§Examples
use probabilistic_collections::bloom::PartitionedBloomFilter;
let mut filter = PartitionedBloomFilter::<String>::from_item_count(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);