|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Industrial-grade Cuckoo Filter implementation. More...
#include <cuckoo-filter.H>
Classes | |
| struct | Bucket |
| struct | Victim |
| Victim entry: a fingerprint displaced during a failed kick chain. More... | |
Public Member Functions | |
| Cuckoo_Filter (size_t capacity, std::optional< std::uint32_t > seed=std::nullopt) | |
| Construct a Cuckoo Filter with a given capacity. | |
| size_t | size () const noexcept |
| Return the number of items currently in the filter. | |
| bool | empty () const noexcept |
| Return whether the filter contains no items. | |
| bool | is_empty () const noexcept |
| Synonym for empty() in traditional Aleph style. | |
| size_t | capacity () const noexcept |
| Return the total number of fingerprint slots (including stash). | |
| double | load_factor () const noexcept |
| Return the load factor of the filter (relative to capacity()). | |
| bool | insert (const T &item) |
| Insert an item into the filter. | |
| bool | append (const T &item) |
| Alias for insert(). | |
| bool | contains (const T &item) const |
| Test membership. | |
| bool | remove (const T &item) |
| Remove an item from the filter. | |
| void | clear () |
| Clear the filter. | |
Private Types | |
| using | Fingerprint = uint32_t |
Private Member Functions | |
| Fingerprint | get_fingerprint (const T &item) const |
| size_t | index_hash (const T &item) const noexcept |
| size_t | alt_index (size_t i, Fingerprint fp) const |
Private Attributes | |
| Aleph::Array< Bucket > | buckets |
| size_t | num_items = 0 |
| size_t | num_buckets = 0 |
| size_t | bucket_mask = 0 |
| std::mt19937 | rng_ |
| Victim | stash_ [stash_size] = {} |
| size_t | stash_count_ = 0 |
Static Private Attributes | |
| static constexpr size_t | max_kicks = 500 |
| static constexpr size_t | stash_size = 4 |
| static constexpr double | kTargetLoad = 0.9 |
| static constexpr Fingerprint | fp_mask = (FingerprintBits == 32) ? 0xFFFFFFFF : (1U << FingerprintBits) - 1 |
Industrial-grade Cuckoo Filter implementation.
Definition at line 98 of file cuckoo-filter.H.
|
private |
Definition at line 103 of file cuckoo-filter.H.
|
inlineexplicit |
Construct a Cuckoo Filter with a given capacity.
| capacity | Minimum number of items to support. |
| seed | Optional RNG seed for deterministic kick sequences. Pass a fixed value in tests to eliminate flakiness. Defaults to a non-deterministic device seed. |
| std::bad_alloc | if memory allocation fails. |
Definition at line 216 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::bucket_mask, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::buckets, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::capacity(), Aleph::divide_and_conquer_partition_dp(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::kTargetLoad, Aleph::next_power_of_2(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_buckets.
|
inlineprivate |
Definition at line 198 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::bucket_mask, and Aleph::murmur3hash().
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove().
|
inline |
Alias for insert().
| item | Item to insert. |
true if insertion succeeded, false if filter is full. | none. |
Definition at line 348 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert().
|
inlinenoexcept |
Return the total number of fingerprint slots (including stash).
| none. |
Definition at line 262 of file cuckoo-filter.H.
References Aleph::divide_and_conquer_partition_dp(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_buckets, and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_size.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::Cuckoo_Filter(), example_memory_optimization(), example_performance(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::load_factor().
|
inline |
Clear the filter.
| none. |
Definition at line 410 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::buckets, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_buckets, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_items, and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_count_.
|
inline |
Test membership.
| item | Item to check. |
true if item is likely present, false if definitely not. | none. |
Definition at line 360 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::alt_index(), Aleph::and, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::buckets, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), Aleph::divide_and_conquer_partition_dp(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::get_fingerprint(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::index_hash(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_, and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_count_.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), example_performance(), TEST(), and TEST().
|
inlinenoexcept |
Return whether the filter contains no items.
true if the filter has no items. | none. |
Definition at line 244 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_items.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::is_empty().
|
inlineprivate |
Definition at line 185 of file cuckoo-filter.H.
References Aleph::dft_hash_fct(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::fp_mask.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove().
|
inlineprivatenoexcept |
Definition at line 193 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::bucket_mask, and Aleph::dft_hash_fct().
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove().
|
inline |
Insert an item into the filter.
| item | Item to insert. |
true if insertion succeeded, false if filter is full. | none. |
Definition at line 283 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::alt_index(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::buckets, Aleph::divide_and_conquer_partition_dp(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::get_fingerprint(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::index_hash(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::max_kicks, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_items, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::rng_, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_count_, and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_size.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::append(), example_performance(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), TEST(), and TEST().
|
inlinenoexcept |
Synonym for empty() in traditional Aleph style.
true if the filter has no items. | none. |
Definition at line 253 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::empty().
|
inlinenoexcept |
Return the load factor of the filter (relative to capacity()).
| none. |
Definition at line 271 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::capacity(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_items.
|
inline |
Remove an item from the filter.
| item | Item to remove. |
true if an instance of the item was removed. | none. |
Definition at line 383 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::alt_index(), Aleph::and, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::buckets, Aleph::divide_and_conquer_partition_dp(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::get_fingerprint(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::index_hash(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_items, Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_, and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::stash_count_.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove().
|
inlinenoexcept |
Return the number of items currently in the filter.
| none. |
Definition at line 235 of file cuckoo-filter.H.
References Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::num_items.
|
private |
|
private |
Definition at line 170 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::Cuckoo_Filter(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::clear(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove().
|
staticconstexprprivate |
Definition at line 183 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::get_fingerprint().
|
staticconstexprprivate |
Definition at line 178 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::Cuckoo_Filter().
|
staticconstexprprivate |
Definition at line 176 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert().
|
private |
|
private |
Definition at line 171 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::clear(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::empty(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::load_factor(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::size().
|
mutableprivate |
Definition at line 174 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert().
|
private |
|
private |
Definition at line 180 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::clear(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::contains(), Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::remove().
|
staticconstexprprivate |
Definition at line 177 of file cuckoo-filter.H.
Referenced by Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::capacity(), and Aleph::Cuckoo_Filter< T, FingerprintBits, EntriesPerBucket >::insert().