summaryrefslogtreecommitdiffstats
path: root/include/ds/BloomFilter.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ds/BloomFilter.h')
-rw-r--r--include/ds/BloomFilter.h17
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: