1 #include <bf/bloom_filter/a2.h>
7 size_t a2_bloom_filter::k(
double fp)
9 return std::floor(-std::log(1 - std::sqrt(1 - fp)) / std::log(2));
12 size_t a2_bloom_filter::capacity(
double fp,
size_t cells)
14 return std::floor(cells / (2 * k(fp)) * std::log(2));
18 a2_bloom_filter::a2_bloom_filter(
size_t k,
size_t cells,
size_t capacity,
19 size_t seed1,
size_t seed2)
20 : first_(make_hasher(k, seed1), cells / 2),
21 second_(make_hasher(k, seed2), cells / 2),
24 assert(cells % 2 == 0);
27 void a2_bloom_filter::add(
object const& o)
32 if (++items_ <= capacity_)
40 size_t a2_bloom_filter::lookup(
object const& o)
const
42 auto r1 = first_.lookup(o);
43 return r1 > 0 ? r1 : second_.lookup(o);
46 void a2_bloom_filter::clear()