Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::Quotient_Filter< T > Class Template Reference

Quotient filter for probabilistic set membership with deletion. More...

#include <quotient-filter.H>

Collaboration diagram for Aleph::Quotient_Filter< T >:
[legend]

Public Member Functions

 Quotient_Filter (uint8_t q, uint8_t r, uint32_t seed=0x5F3759DF)
 Construct a quotient filter.
 
Quotient_Filterinsert (const T &item)
 Insert an element.
 
bool contains (const T &item) const noexcept
 Test membership.
 
bool remove (const T &item) noexcept
 Remove an element.
 
size_t size () const noexcept
 Number of elements.
 
size_t capacity () const noexcept
 Number of slots (2^q).
 
double load_factor () const noexcept
 Current load factor.
 
bool is_empty () const noexcept
 True if empty.
 
uint8_t q () const noexcept
 Quotient bits.
 
uint8_t r () const noexcept
 Remainder bits.
 
double false_positive_rate () const noexcept
 Theoretical FP probability ~ 2^{-r}.
 
uint32_t seed () const noexcept
 Hash seed.
 
size_t memory_usage () const noexcept
 Memory usage in bytes.
 
void clear () noexcept
 Remove all elements.
 
void merge (const Quotient_Filter &other)
 Merge another filter (same q, r, seed).
 
void swap (Quotient_Filter &other) noexcept
 Swap in O(1).
 

Static Public Member Functions

static Quotient_Filter from_capacity (size_t expected_n, double fp_rate, uint32_t seed=0x5F3759DF)
 Construct from desired capacity and false positive rate.
 
static std::pair< uint8_t, uint8_testimate (size_t n, double fp_rate)
 Estimate (q, r) for n elements and target FP rate.
 

Private Types

enum class  Insert_Result { inserted , duplicate , full }
 

Private Member Functions

uint64_t rem_mask () const noexcept
 
bool get_occ (size_t i) const noexcept
 
bool get_cont (size_t i) const noexcept
 
bool get_shft (size_t i) const noexcept
 
bool slot_empty (size_t i) const noexcept
 
bool has_element (const size_t i) const noexcept
 
bool is_run_start (const size_t i) const noexcept
 
void set_occ (const size_t i, const bool v) noexcept
 
void set_cont (const size_t i, const bool v) noexcept
 
void set_shft (const size_t i, const bool v) noexcept
 
uint64_t get_rem (const size_t i) const noexcept
 
void set_rem (const size_t i, const uint64_t rem) noexcept
 
void set_element (const size_t i, const bool cont, const bool shft, const uint64_t rem) noexcept
 
void clear_element (const size_t i) noexcept
 
size_t incr (const size_t i) const noexcept
 
size_t decr (const size_t i) const noexcept
 
std::pair< size_t, uint64_tfingerprint (const T &item) const
 
size_t find_run_start (size_t fq) const noexcept
 
size_t find_first_unused (size_t start) const noexcept
 
void shift_elements_right (size_t pos, size_t empty) noexcept
 
Insert_Result do_insert (size_t fq, uint64_t fr)
 
void shift_elements_left (size_t pos) noexcept
 

Private Attributes

uint8_t q_
 
uint8_t r_
 
size_t num_slots_
 
size_t num_elems_
 
uint32_t seed_
 
Array< uint64_tslots_
 

Static Private Attributes

static constexpr uint64_t OCC_BIT = 1ULL << 0
 
static constexpr uint64_t CONT_BIT = 1ULL << 1
 
static constexpr uint64_t SHFT_BIT = 1ULL << 2
 
static constexpr uint64_t META_MASK = 0x7ULL
 

Detailed Description

template<typename T>
class Aleph::Quotient_Filter< T >

Quotient filter for probabilistic set membership with deletion.

Template Parameters
TElement type. Must be hashable via murmur3hash(T, seed).

Definition at line 137 of file quotient-filter.H.

Member Enumeration Documentation

◆ Insert_Result

Enumerator
inserted 
duplicate 
full 

Definition at line 378 of file quotient-filter.H.

Constructor & Destructor Documentation

◆ Quotient_Filter()

template<typename T >
Aleph::Quotient_Filter< T >::Quotient_Filter ( uint8_t  q,
uint8_t  r,
uint32_t  seed = 0x5F3759DF 
)
inline

Construct a quotient filter.

Parameters
[in]qNumber of quotient bits (2^q slots). Must be in [1, 32].
[in]rRemainder bits per slot (FP rate ~ 2^{-r}). Must be in [1, 60].
[in]seedHash seed (default: 0x5F3759DF).
Exceptions
std::domain_errorif q or r are out of range, or q + r > 64.

Definition at line 486 of file quotient-filter.H.

References ah_domain_error_if, Aleph::divide_and_conquer_partition_dp(), Aleph::Quotient_Filter< T >::num_slots_, Aleph::Quotient_Filter< T >::q(), Aleph::Quotient_Filter< T >::r(), and Aleph::Quotient_Filter< T >::slots_.

Member Function Documentation

◆ capacity()

template<typename T >
size_t Aleph::Quotient_Filter< T >::capacity ( ) const
inlinenoexcept

Number of slots (2^q).

O(1).

Definition at line 615 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::num_slots_.

◆ clear()

template<typename T >
void Aleph::Quotient_Filter< T >::clear ( )
inlinenoexcept

◆ clear_element()

◆ contains()

◆ decr()

template<typename T >
size_t Aleph::Quotient_Filter< T >::decr ( const size_t  i) const
inlineprivatenoexcept

◆ do_insert()

◆ estimate()

template<typename T >
static std::pair< uint8_t, uint8_t > Aleph::Quotient_Filter< T >::estimate ( size_t  n,
double  fp_rate 
)
inlinestatic

Estimate (q, r) for n elements and target FP rate.

Definition at line 695 of file quotient-filter.H.

References ah_domain_error_if, and Aleph::divide_and_conquer_partition_dp().

Referenced by TEST().

◆ false_positive_rate()

template<typename T >
double Aleph::Quotient_Filter< T >::false_positive_rate ( ) const
inlinenoexcept

Theoretical FP probability ~ 2^{-r}.

Definition at line 645 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::r_.

◆ find_first_unused()

template<typename T >
size_t Aleph::Quotient_Filter< T >::find_first_unused ( size_t  start) const
inlineprivatenoexcept

◆ find_run_start()

◆ fingerprint()

◆ from_capacity()

template<typename T >
static Quotient_Filter Aleph::Quotient_Filter< T >::from_capacity ( size_t  expected_n,
double  fp_rate,
uint32_t  seed = 0x5F3759DF 
)
inlinestatic

Construct from desired capacity and false positive rate.

Parameters
[in]expected_nExpected number of elements.
[in]fp_rateTarget false positive probability.
[in]seedHash seed.
Exceptions
std::domain_errorif expected_n == 0 or fp_rate not in (0,1).

Definition at line 504 of file quotient-filter.H.

References ah_domain_error_if, Aleph::divide_and_conquer_partition_dp(), and Aleph::Quotient_Filter< T >::seed().

Referenced by demo_cache(), and TEST().

◆ get_cont()

◆ get_occ()

◆ get_rem()

◆ get_shft()

◆ has_element()

◆ incr()

◆ insert()

◆ is_empty()

template<typename T >
bool Aleph::Quotient_Filter< T >::is_empty ( ) const
inlinenoexcept

True if empty.

O(1).

Definition at line 627 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::num_elems_.

◆ is_run_start()

template<typename T >
bool Aleph::Quotient_Filter< T >::is_run_start ( const size_t  i) const
inlineprivatenoexcept

◆ load_factor()

template<typename T >
double Aleph::Quotient_Filter< T >::load_factor ( ) const
inlinenoexcept

Current load factor.

O(1).

Definition at line 621 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::num_elems_, and Aleph::Quotient_Filter< T >::num_slots_.

◆ memory_usage()

template<typename T >
size_t Aleph::Quotient_Filter< T >::memory_usage ( ) const
inlinenoexcept

◆ merge()

◆ q()

template<typename T >
uint8_t Aleph::Quotient_Filter< T >::q ( ) const
inlinenoexcept

Quotient bits.

Definition at line 633 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::q_.

Referenced by Aleph::Quotient_Filter< T >::Quotient_Filter().

◆ r()

template<typename T >
uint8_t Aleph::Quotient_Filter< T >::r ( ) const
inlinenoexcept

Remainder bits.

Definition at line 639 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::r_.

Referenced by Aleph::Quotient_Filter< T >::Quotient_Filter().

◆ rem_mask()

◆ remove()

◆ seed()

template<typename T >
uint32_t Aleph::Quotient_Filter< T >::seed ( ) const
inlinenoexcept

Hash seed.

Definition at line 651 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::seed_.

Referenced by Aleph::Quotient_Filter< T >::from_capacity().

◆ set_cont()

◆ set_element()

◆ set_occ()

◆ set_rem()

◆ set_shft()

◆ shift_elements_left()

◆ shift_elements_right()

◆ size()

template<typename T >
size_t Aleph::Quotient_Filter< T >::size ( ) const
inlinenoexcept

Number of elements.

O(1).

Definition at line 609 of file quotient-filter.H.

References Aleph::Quotient_Filter< T >::num_elems_.

Referenced by demo_merge(), and TEST().

◆ slot_empty()

template<typename T >
bool Aleph::Quotient_Filter< T >::slot_empty ( size_t  i) const
inlineprivatenoexcept

◆ swap()

Member Data Documentation

◆ CONT_BIT

◆ META_MASK

template<typename T >
constexpr uint64_t Aleph::Quotient_Filter< T >::META_MASK = 0x7ULL
staticconstexprprivate

◆ num_elems_

◆ num_slots_

◆ OCC_BIT

◆ q_

◆ r_

◆ seed_

◆ SHFT_BIT

◆ slots_


The documentation for this class was generated from the following file: