| 190 | } |
| 191 | |
| 192 | void BloomFilter::Insert(const void *key, size_t len) |
| 193 | { |
| 194 | uint32_t digest[4]; |
| 195 | for (size_t i = 0; i < m_num_hash_functions; ++i) |
| 196 | { |
| 197 | if (i % 4 == 0) |
| 198 | { |
| 199 | if (i != 0) // use original key at first time |
| 200 | MurmurHash3_x86_128(digest, 16, i, digest); |
| 201 | else |
| 202 | MurmurHash3_x86_128(key, len, 0, digest); |
| 203 | } |
| 204 | |
| 205 | uint32_t bit_index = m_divisor.Modulu(digest[i % 4]); |
| 206 | assert(bit_index == digest[i % 4] % m_num_bits); |
| 207 | m_bitmap[bit_index / CHAR_BIT] |= (1 << (bit_index % CHAR_BIT)); |
| 208 | } |
| 209 | } |
| 210 | |
| 211 | bool BloomFilter::InsertUnique(const void *key, size_t len) |
| 212 | { |
nothing calls this directly
no test coverage detected