diff options
Diffstat (limited to 'include/ds/BloomFilter.h')
| -rw-r--r-- | include/ds/BloomFilter.h | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/include/ds/BloomFilter.h b/include/ds/BloomFilter.h index fddd1fb..d55a7af 100644 --- a/include/ds/BloomFilter.h +++ b/include/ds/BloomFilter.h @@ -18,25 +18,28 @@ namespace de { +template <typename K> class BloomFilter { public: - BloomFilter(size_t n_bits, size_t k, const gsl_rng* rng) + BloomFilter(size_t n_bits, size_t k) : m_n_bits(n_bits), m_n_salts(k), m_bitarray(n_bits) { + gsl_rng *rng = gsl_rng_alloc(gsl_rng_mt19937); salt = (uint16_t*) aligned_alloc(CACHELINE_SIZE, CACHELINEALIGN(k * sizeof(uint16_t))); for (size_t i = 0; i < k; ++i) { salt[i] = (uint16_t) gsl_rng_uniform_int(rng, 1 << 16); } - + + gsl_rng_free(rng); } - BloomFilter(double max_fpr, size_t n, size_t k, const gsl_rng* rng) - : BloomFilter((size_t)(-(double) (k * n) / std::log(1.0 - std::pow(max_fpr, 1.0 / k))), k, rng) {} + BloomFilter(double max_fpr, size_t n, size_t k) + : BloomFilter((size_t)(-(double) (k * n) / std::log(1.0 - std::pow(max_fpr, 1.0 / k))), k) {} ~BloomFilter() { if (salt) free(salt); } - int insert(const key_t& key, size_t sz = sizeof(key_t)) { + int insert(const K& key, size_t sz = sizeof(K)) { if (m_bitarray.size() == 0) return 0; for (size_t i = 0; i < m_n_salts; ++i) { @@ -46,7 +49,7 @@ public: return 1; } - bool lookup(const key_t& key, size_t sz = sizeof(key_t)) { + bool lookup(const K& key, size_t sz = sizeof(K)) { if (m_bitarray.size() == 0) return false; for (size_t i = 0; i < m_n_salts; ++i) { if (!m_bitarray.is_set(hash_bytes_with_salt((const char*)&key, sz, salt[i]) % m_n_bits)) @@ -60,7 +63,7 @@ public: m_bitarray.clear(); } - size_t get_memory_utilization() { + size_t get_memory_usage() { return this->m_bitarray.mem_size(); } private: |