C++ Bloom Filter Library  release
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
bloom_filter Class Reference

#include <bloom_filter.hpp>

Inheritance diagram for bloom_filter:
[legend]

Public Member Functions

 bloom_filter ()
 
 bloom_filter (const bloom_parameters &p)
 
 bloom_filter (const bloom_filter &filter)
 
bool operator== (const bloom_filter &f) const
 
bool operator!= (const bloom_filter &f) const
 
bloom_filteroperator= (const bloom_filter &f)
 
virtual ~bloom_filter ()
 
bool operator! () const
 
void clear ()
 
void insert (const unsigned char *key_begin, const std::size_t &length)
 
template<typename T >
void insert (const T &t)
 
void insert (const std::string &key)
 
void insert (const char *data, const std::size_t &length)
 
template<typename InputIterator >
void insert (const InputIterator begin, const InputIterator end)
 
virtual bool contains (const unsigned char *key_begin, const std::size_t length) const
 
template<typename T >
bool contains (const T &t) const
 
bool contains (const std::string &key) const
 
bool contains (const char *data, const std::size_t &length) const
 
template<typename InputIterator >
InputIterator contains_all (const InputIterator begin, const InputIterator end) const
 
template<typename InputIterator >
InputIterator contains_none (const InputIterator begin, const InputIterator end) const
 
virtual unsigned long long int size () const
 
unsigned long long int element_count () const
 
double effective_fpp () const
 
bloom_filteroperator&= (const bloom_filter &f)
 
bloom_filteroperator|= (const bloom_filter &f)
 
bloom_filteroperator^= (const bloom_filter &f)
 
const cell_typetable () const
 
std::size_t hash_count ()
 

Protected Types

typedef unsigned int bloom_type
 
typedef unsigned char cell_type
 
typedef std::vector< unsigned char > table_type
 

Protected Member Functions

virtual void compute_indices (const bloom_type &hash, std::size_t &bit_index, std::size_t &bit) const
 
void generate_unique_salt ()
 
bloom_type hash_ap (const unsigned char *begin, std::size_t remaining_length, bloom_type hash) const
 

Protected Attributes

std::vector< bloom_typesalt_
 
std::vector< unsigned char > bit_table_
 
unsigned int salt_count_
 
unsigned long long int table_size_
 
unsigned long long int projected_element_count_
 
unsigned long long int inserted_element_count_
 
unsigned long long int random_seed_
 
double desired_false_positive_probability_
 

Detailed Description

Definition at line 164 of file bloom_filter.hpp.

Member Typedef Documentation

◆ bloom_type

typedef unsigned int bloom_filter::bloom_type
protected

Definition at line 168 of file bloom_filter.hpp.

◆ cell_type

typedef unsigned char bloom_filter::cell_type
protected

Definition at line 169 of file bloom_filter.hpp.

◆ table_type

typedef std::vector<unsigned char> bloom_filter::table_type
protected

Definition at line 170 of file bloom_filter.hpp.

Constructor & Destructor Documentation

◆ bloom_filter() [1/3]

bloom_filter::bloom_filter ( )
inline

Definition at line 174 of file bloom_filter.hpp.

175  : salt_count_(0),
176  table_size_(0),
179  random_seed_(0),
181  {}
unsigned long long int table_size_
unsigned long long int inserted_element_count_
unsigned long long int random_seed_
unsigned int salt_count_
double desired_false_positive_probability_
unsigned long long int projected_element_count_

◆ bloom_filter() [2/3]

bloom_filter::bloom_filter ( const bloom_parameters p)
inline

Definition at line 183 of file bloom_filter.hpp.

References bits_per_char, bloom_parameters::optimal_parameters_t::number_of_hashes, bloom_parameters::optimal_parameters, and bloom_parameters::optimal_parameters_t::table_size.

186  random_seed_((p.random_seed * 0xA5A5A5A5) + 1),
188  {
191 
193 
194  bit_table_.resize(table_size_ / bits_per_char, static_cast<unsigned char>(0x00));
195  }
unsigned long long int random_seed
static const std::size_t bits_per_char
double false_positive_probability
std::vector< unsigned char > bit_table_
unsigned long long int table_size_
unsigned long long int inserted_element_count_
void generate_unique_salt()
unsigned long long int random_seed_
unsigned int salt_count_
optimal_parameters_t optimal_parameters
double desired_false_positive_probability_
unsigned long long int projected_element_count_
unsigned long long int projected_element_count

◆ bloom_filter() [3/3]

bloom_filter::bloom_filter ( const bloom_filter filter)
inline

Definition at line 197 of file bloom_filter.hpp.

198  {
199  this->operator=(filter);
200  }
bloom_filter & operator=(const bloom_filter &f)

◆ ~bloom_filter()

virtual bloom_filter::~bloom_filter ( )
inlinevirtual

Definition at line 246 of file bloom_filter.hpp.

247  {}

Member Function Documentation

◆ clear()

void bloom_filter::clear ( )
inline

Definition at line 254 of file bloom_filter.hpp.

255  {
256  std::fill(bit_table_.begin(), bit_table_.end(), static_cast<unsigned char>(0x00));
258  }
std::vector< unsigned char > bit_table_
unsigned long long int inserted_element_count_

◆ compute_indices()

virtual void bloom_filter::compute_indices ( const bloom_type hash,
std::size_t &  bit_index,
std::size_t &  bit 
) const
inlineprotectedvirtual

Definition at line 461 of file bloom_filter.hpp.

References bits_per_char.

462  {
463  bit_index = hash % table_size_;
464  bit = bit_index % bits_per_char;
465  }
static const std::size_t bits_per_char
unsigned long long int table_size_

◆ contains() [1/4]

virtual bool bloom_filter::contains ( const unsigned char *  key_begin,
const std::size_t  length 
) const
inlinevirtual

Definition at line 303 of file bloom_filter.hpp.

References bit_mask, and bits_per_char.

Referenced by main().

304  {
305  std::size_t bit_index = 0;
306  std::size_t bit = 0;
307 
308  for (std::size_t i = 0; i < salt_.size(); ++i)
309  {
310  compute_indices(hash_ap(key_begin, length, salt_[i]), bit_index, bit);
311 
312  if ((bit_table_[bit_index / bits_per_char] & bit_mask[bit]) != bit_mask[bit])
313  {
314  return false;
315  }
316  }
317 
318  return true;
319  }
static const unsigned char bit_mask[bits_per_char]
static const std::size_t bits_per_char
std::vector< unsigned char > bit_table_
bloom_type hash_ap(const unsigned char *begin, std::size_t remaining_length, bloom_type hash) const
std::vector< bloom_type > salt_
virtual void compute_indices(const bloom_type &hash, std::size_t &bit_index, std::size_t &bit) const
Here is the caller graph for this function:

◆ contains() [2/4]

template<typename T >
bool bloom_filter::contains ( const T &  t) const
inline

Definition at line 322 of file bloom_filter.hpp.

323  {
324  return contains(reinterpret_cast<const unsigned char*>(&t),static_cast<std::size_t>(sizeof(T)));
325  }
virtual bool contains(const unsigned char *key_begin, const std::size_t length) const

◆ contains() [3/4]

bool bloom_filter::contains ( const std::string &  key) const
inline

Definition at line 327 of file bloom_filter.hpp.

328  {
329  return contains(reinterpret_cast<const unsigned char*>(key.c_str()),key.size());
330  }
virtual bool contains(const unsigned char *key_begin, const std::size_t length) const

◆ contains() [4/4]

bool bloom_filter::contains ( const char *  data,
const std::size_t &  length 
) const
inline

Definition at line 332 of file bloom_filter.hpp.

333  {
334  return contains(reinterpret_cast<const unsigned char*>(data),length);
335  }
virtual bool contains(const unsigned char *key_begin, const std::size_t length) const

◆ contains_all()

template<typename InputIterator >
InputIterator bloom_filter::contains_all ( const InputIterator  begin,
const InputIterator  end 
) const
inline

Definition at line 338 of file bloom_filter.hpp.

Referenced by main().

339  {
340  InputIterator itr = begin;
341 
342  while (end != itr)
343  {
344  if (!contains(*itr))
345  {
346  return itr;
347  }
348 
349  ++itr;
350  }
351 
352  return end;
353  }
virtual bool contains(const unsigned char *key_begin, const std::size_t length) const
Here is the caller graph for this function:

◆ contains_none()

template<typename InputIterator >
InputIterator bloom_filter::contains_none ( const InputIterator  begin,
const InputIterator  end 
) const
inline

Definition at line 356 of file bloom_filter.hpp.

357  {
358  InputIterator itr = begin;
359 
360  while (end != itr)
361  {
362  if (contains(*itr))
363  {
364  return itr;
365  }
366 
367  ++itr;
368  }
369 
370  return end;
371  }
virtual bool contains(const unsigned char *key_begin, const std::size_t length) const

◆ effective_fpp()

double bloom_filter::effective_fpp ( ) const
inline

Definition at line 383 of file bloom_filter.hpp.

Referenced by main().

384  {
385  /*
386  Note:
387  The effective false positive probability is calculated using the
388  designated table size and hash function count in conjunction with
389  the current number of inserted elements - not the user defined
390  predicated/expected number of inserted elements.
391  */
392  return std::pow(1.0 - std::exp(-1.0 * salt_.size() * inserted_element_count_ / size()), 1.0 * salt_.size());
393  }
virtual unsigned long long int size() const
unsigned long long int inserted_element_count_
std::vector< bloom_type > salt_
Here is the caller graph for this function:

◆ element_count()

unsigned long long int bloom_filter::element_count ( ) const
inline

Definition at line 378 of file bloom_filter.hpp.

379  {
381  }
unsigned long long int inserted_element_count_

◆ generate_unique_salt()

void bloom_filter::generate_unique_salt ( )
inlineprotected

Definition at line 467 of file bloom_filter.hpp.

468  {
469  /*
470  Note:
471  A distinct hash function need not be implementation-wise
472  distinct. In the current implementation "seeding" a common
473  hash function with different values seems to be adequate.
474  */
475  const unsigned int predef_salt_count = 128;
476 
477  static const bloom_type predef_salt[predef_salt_count] =
478  {
479  0xAAAAAAAA, 0x55555555, 0x33333333, 0xCCCCCCCC,
480  0x66666666, 0x99999999, 0xB5B5B5B5, 0x4B4B4B4B,
481  0xAA55AA55, 0x55335533, 0x33CC33CC, 0xCC66CC66,
482  0x66996699, 0x99B599B5, 0xB54BB54B, 0x4BAA4BAA,
483  0xAA33AA33, 0x55CC55CC, 0x33663366, 0xCC99CC99,
484  0x66B566B5, 0x994B994B, 0xB5AAB5AA, 0xAAAAAA33,
485  0x555555CC, 0x33333366, 0xCCCCCC99, 0x666666B5,
486  0x9999994B, 0xB5B5B5AA, 0xFFFFFFFF, 0xFFFF0000,
487  0xB823D5EB, 0xC1191CDF, 0xF623AEB3, 0xDB58499F,
488  0xC8D42E70, 0xB173F616, 0xA91A5967, 0xDA427D63,
489  0xB1E8A2EA, 0xF6C0D155, 0x4909FEA3, 0xA68CC6A7,
490  0xC395E782, 0xA26057EB, 0x0CD5DA28, 0x467C5492,
491  0xF15E6982, 0x61C6FAD3, 0x9615E352, 0x6E9E355A,
492  0x689B563E, 0x0C9831A8, 0x6753C18B, 0xA622689B,
493  0x8CA63C47, 0x42CC2884, 0x8E89919B, 0x6EDBD7D3,
494  0x15B6796C, 0x1D6FDFE4, 0x63FF9092, 0xE7401432,
495  0xEFFE9412, 0xAEAEDF79, 0x9F245A31, 0x83C136FC,
496  0xC3DA4A8C, 0xA5112C8C, 0x5271F491, 0x9A948DAB,
497  0xCEE59A8D, 0xB5F525AB, 0x59D13217, 0x24E7C331,
498  0x697C2103, 0x84B0A460, 0x86156DA9, 0xAEF2AC68,
499  0x23243DA5, 0x3F649643, 0x5FA495A8, 0x67710DF8,
500  0x9A6C499E, 0xDCFB0227, 0x46A43433, 0x1832B07A,
501  0xC46AFF3C, 0xB9C8FFF0, 0xC9500467, 0x34431BDF,
502  0xB652432B, 0xE367F12B, 0x427F4C1B, 0x224C006E,
503  0x2E7E5A89, 0x96F99AA5, 0x0BEB452A, 0x2FD87C39,
504  0x74B2E1FB, 0x222EFD24, 0xF357F60C, 0x440FCB1E,
505  0x8BBE030F, 0x6704DC29, 0x1144D12F, 0x948B1355,
506  0x6D8FD7E9, 0x1C11A014, 0xADD1592F, 0xFB3C712E,
507  0xFC77642F, 0xF9C4CE8C, 0x31312FB9, 0x08B0DD79,
508  0x318FA6E7, 0xC040D23D, 0xC0589AA7, 0x0CA5C075,
509  0xF874B172, 0x0CF914D5, 0x784D3280, 0x4E8CFEBC,
510  0xC569F575, 0xCDB2A091, 0x2CC016B4, 0x5C5F4421
511  };
512 
513  if (salt_count_ <= predef_salt_count)
514  {
515  std::copy(predef_salt,
516  predef_salt + salt_count_,
517  std::back_inserter(salt_));
518 
519  for (std::size_t i = 0; i < salt_.size(); ++i)
520  {
521  /*
522  Note:
523  This is done to integrate the user defined random seed,
524  so as to allow for the generation of unique bloom filter
525  instances.
526  */
527  salt_[i] = salt_[i] * salt_[(i + 3) % salt_.size()] + static_cast<bloom_type>(random_seed_);
528  }
529  }
530  else
531  {
532  std::copy(predef_salt, predef_salt + predef_salt_count, std::back_inserter(salt_));
533 
534  srand(static_cast<unsigned int>(random_seed_));
535 
536  while (salt_.size() < salt_count_)
537  {
538  bloom_type current_salt = static_cast<bloom_type>(rand()) * static_cast<bloom_type>(rand());
539 
540  if (0 == current_salt)
541  continue;
542 
543  if (salt_.end() == std::find(salt_.begin(), salt_.end(), current_salt))
544  {
545  salt_.push_back(current_salt);
546  }
547  }
548  }
549  }
unsigned long long int random_seed_
unsigned int salt_count_
std::vector< bloom_type > salt_
unsigned int bloom_type

◆ hash_ap()

bloom_type bloom_filter::hash_ap ( const unsigned char *  begin,
std::size_t  remaining_length,
bloom_type  hash 
) const
inlineprotected

Definition at line 551 of file bloom_filter.hpp.

552  {
553  const unsigned char* itr = begin;
554  unsigned int loop = 0;
555 
556  while (remaining_length >= 8)
557  {
558  const unsigned int& i1 = *(reinterpret_cast<const unsigned int*>(itr)); itr += sizeof(unsigned int);
559  const unsigned int& i2 = *(reinterpret_cast<const unsigned int*>(itr)); itr += sizeof(unsigned int);
560 
561  hash ^= (hash << 7) ^ i1 * (hash >> 3) ^
562  (~((hash << 11) + (i2 ^ (hash >> 5))));
563 
564  remaining_length -= 8;
565  }
566 
567  if (remaining_length)
568  {
569  if (remaining_length >= 4)
570  {
571  const unsigned int& i = *(reinterpret_cast<const unsigned int*>(itr));
572 
573  if (loop & 0x01)
574  hash ^= (hash << 7) ^ i * (hash >> 3);
575  else
576  hash ^= (~((hash << 11) + (i ^ (hash >> 5))));
577 
578  ++loop;
579 
580  remaining_length -= 4;
581 
582  itr += sizeof(unsigned int);
583  }
584 
585  if (remaining_length >= 2)
586  {
587  const unsigned short& i = *(reinterpret_cast<const unsigned short*>(itr));
588 
589  if (loop & 0x01)
590  hash ^= (hash << 7) ^ i * (hash >> 3);
591  else
592  hash ^= (~((hash << 11) + (i ^ (hash >> 5))));
593 
594  ++loop;
595 
596  remaining_length -= 2;
597 
598  itr += sizeof(unsigned short);
599  }
600 
601  if (remaining_length)
602  {
603  hash += ((*itr) ^ (hash * 0xA5A5A5A5)) + loop;
604  }
605  }
606 
607  return hash;
608  }

◆ hash_count()

std::size_t bloom_filter::hash_count ( )
inline

Definition at line 454 of file bloom_filter.hpp.

455  {
456  return salt_.size();
457  }
std::vector< bloom_type > salt_

◆ insert() [1/5]

void bloom_filter::insert ( const unsigned char *  key_begin,
const std::size_t &  length 
)
inline

Definition at line 260 of file bloom_filter.hpp.

References bit_mask, and bits_per_char.

Referenced by main().

261  {
262  std::size_t bit_index = 0;
263  std::size_t bit = 0;
264 
265  for (std::size_t i = 0; i < salt_.size(); ++i)
266  {
267  compute_indices(hash_ap(key_begin, length, salt_[i]), bit_index, bit);
268 
269  bit_table_[bit_index / bits_per_char] |= bit_mask[bit];
270  }
271 
273  }
static const unsigned char bit_mask[bits_per_char]
static const std::size_t bits_per_char
std::vector< unsigned char > bit_table_
unsigned long long int inserted_element_count_
bloom_type hash_ap(const unsigned char *begin, std::size_t remaining_length, bloom_type hash) const
std::vector< bloom_type > salt_
virtual void compute_indices(const bloom_type &hash, std::size_t &bit_index, std::size_t &bit) const
Here is the caller graph for this function:

◆ insert() [2/5]

template<typename T >
void bloom_filter::insert ( const T &  t)
inline

Definition at line 276 of file bloom_filter.hpp.

277  {
278  // Note: T must be a C++ POD type.
279  insert(reinterpret_cast<const unsigned char*>(&t),sizeof(T));
280  }
void insert(const unsigned char *key_begin, const std::size_t &length)

◆ insert() [3/5]

void bloom_filter::insert ( const std::string &  key)
inline

Definition at line 282 of file bloom_filter.hpp.

283  {
284  insert(reinterpret_cast<const unsigned char*>(key.data()),key.size());
285  }
void insert(const unsigned char *key_begin, const std::size_t &length)

◆ insert() [4/5]

void bloom_filter::insert ( const char *  data,
const std::size_t &  length 
)
inline

Definition at line 287 of file bloom_filter.hpp.

288  {
289  insert(reinterpret_cast<const unsigned char*>(data),length);
290  }
void insert(const unsigned char *key_begin, const std::size_t &length)

◆ insert() [5/5]

template<typename InputIterator >
void bloom_filter::insert ( const InputIterator  begin,
const InputIterator  end 
)
inline

Definition at line 293 of file bloom_filter.hpp.

294  {
295  InputIterator itr = begin;
296 
297  while (end != itr)
298  {
299  insert(*(itr++));
300  }
301  }
void insert(const unsigned char *key_begin, const std::size_t &length)

◆ operator!()

bool bloom_filter::operator! ( ) const
inline

Definition at line 249 of file bloom_filter.hpp.

250  {
251  return (0 == table_size_);
252  }
unsigned long long int table_size_

◆ operator!=()

bool bloom_filter::operator!= ( const bloom_filter f) const
inline

Definition at line 221 of file bloom_filter.hpp.

222  {
223  return !operator==(f);
224  }
bool operator==(const bloom_filter &f) const

◆ operator&=()

bloom_filter& bloom_filter::operator &= ( const bloom_filter f)
inline

Definition at line 395 of file bloom_filter.hpp.

References bit_table_, random_seed_, salt_count_, and table_size_.

396  {
397  /* intersection */
398  if (
399  (salt_count_ == f.salt_count_ ) &&
400  (table_size_ == f.table_size_ ) &&
402  )
403  {
404  for (std::size_t i = 0; i < bit_table_.size(); ++i)
405  {
406  bit_table_[i] &= f.bit_table_[i];
407  }
408  }
409 
410  return *this;
411  }
std::vector< unsigned char > bit_table_
unsigned long long int table_size_
unsigned long long int random_seed_
unsigned int salt_count_

◆ operator=()

bloom_filter& bloom_filter::operator= ( const bloom_filter f)
inline

Definition at line 226 of file bloom_filter.hpp.

References bit_table_, desired_false_positive_probability_, inserted_element_count_, projected_element_count_, random_seed_, salt_, salt_count_, and table_size_.

227  {
228  if (this != &f)
229  {
233  salt_ = f.salt_;
234 
237 
239 
241  }
242 
243  return *this;
244  }
std::vector< unsigned char > bit_table_
unsigned long long int table_size_
unsigned long long int inserted_element_count_
unsigned long long int random_seed_
unsigned int salt_count_
std::vector< bloom_type > salt_
double desired_false_positive_probability_
unsigned long long int projected_element_count_

◆ operator==()

bool bloom_filter::operator== ( const bloom_filter f) const
inline

Definition at line 202 of file bloom_filter.hpp.

References bit_table_, desired_false_positive_probability_, inserted_element_count_, projected_element_count_, random_seed_, salt_, salt_count_, and table_size_.

203  {
204  if (this != &f)
205  {
206  return
207  (salt_count_ == f.salt_count_ ) &&
208  (table_size_ == f.table_size_ ) &&
209  (bit_table_.size() == f.bit_table_.size() ) &&
212  (random_seed_ == f.random_seed_ ) &&
214  (salt_ == f.salt_ ) &&
215  (bit_table_ == f.bit_table_ ) ;
216  }
217  else
218  return true;
219  }
std::vector< unsigned char > bit_table_
unsigned long long int table_size_
unsigned long long int inserted_element_count_
unsigned long long int random_seed_
unsigned int salt_count_
std::vector< bloom_type > salt_
double desired_false_positive_probability_
unsigned long long int projected_element_count_

◆ operator^=()

bloom_filter& bloom_filter::operator^= ( const bloom_filter f)
inline

Definition at line 431 of file bloom_filter.hpp.

References bit_table_, random_seed_, salt_count_, and table_size_.

432  {
433  /* difference */
434  if (
435  (salt_count_ == f.salt_count_ ) &&
436  (table_size_ == f.table_size_ ) &&
438  )
439  {
440  for (std::size_t i = 0; i < bit_table_.size(); ++i)
441  {
442  bit_table_[i] ^= f.bit_table_[i];
443  }
444  }
445 
446  return *this;
447  }
std::vector< unsigned char > bit_table_
unsigned long long int table_size_
unsigned long long int random_seed_
unsigned int salt_count_

◆ operator|=()

bloom_filter& bloom_filter::operator|= ( const bloom_filter f)
inline

Definition at line 413 of file bloom_filter.hpp.

References bit_table_, random_seed_, salt_count_, and table_size_.

414  {
415  /* union */
416  if (
417  (salt_count_ == f.salt_count_ ) &&
418  (table_size_ == f.table_size_ ) &&
420  )
421  {
422  for (std::size_t i = 0; i < bit_table_.size(); ++i)
423  {
424  bit_table_[i] |= f.bit_table_[i];
425  }
426  }
427 
428  return *this;
429  }
std::vector< unsigned char > bit_table_
unsigned long long int table_size_
unsigned long long int random_seed_
unsigned int salt_count_

◆ size()

virtual unsigned long long int bloom_filter::size ( ) const
inlinevirtual

Reimplemented in compressible_bloom_filter.

Definition at line 373 of file bloom_filter.hpp.

Referenced by main().

374  {
375  return table_size_;
376  }
unsigned long long int table_size_
Here is the caller graph for this function:

◆ table()

const cell_type* bloom_filter::table ( ) const
inline

Definition at line 449 of file bloom_filter.hpp.

450  {
451  return bit_table_.data();
452  }
std::vector< unsigned char > bit_table_

Member Data Documentation

◆ bit_table_

std::vector<unsigned char> bloom_filter::bit_table_
protected

Definition at line 611 of file bloom_filter.hpp.

Referenced by operator&=(), operator=(), operator==(), operator^=(), and operator|=().

◆ desired_false_positive_probability_

double bloom_filter::desired_false_positive_probability_
protected

Definition at line 617 of file bloom_filter.hpp.

Referenced by operator=(), and operator==().

◆ inserted_element_count_

unsigned long long int bloom_filter::inserted_element_count_
protected

Definition at line 615 of file bloom_filter.hpp.

Referenced by operator=(), and operator==().

◆ projected_element_count_

unsigned long long int bloom_filter::projected_element_count_
protected

Definition at line 614 of file bloom_filter.hpp.

Referenced by operator=(), and operator==().

◆ random_seed_

unsigned long long int bloom_filter::random_seed_
protected

Definition at line 616 of file bloom_filter.hpp.

Referenced by operator&=(), operator=(), operator==(), operator^=(), and operator|=().

◆ salt_

std::vector<bloom_type> bloom_filter::salt_
protected

Definition at line 610 of file bloom_filter.hpp.

Referenced by operator=(), and operator==().

◆ salt_count_

unsigned int bloom_filter::salt_count_
protected

Definition at line 612 of file bloom_filter.hpp.

Referenced by operator&=(), operator=(), operator==(), operator^=(), and operator|=().

◆ table_size_

unsigned long long int bloom_filter::table_size_
protected

Definition at line 613 of file bloom_filter.hpp.

Referenced by operator&=(), operator=(), operator==(), operator^=(), and operator|=().


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