Chromium Code Reviews| Index: components/rappor/bloom_filter.cc |
| diff --git a/components/rappor/bloom_filter.cc b/components/rappor/bloom_filter.cc |
| index 9ad8f3ca0ce9d68191e8896229dbf3d44c2e1fcc..a93d6ddab5a96286be665042092dced0ab1f7178 100644 |
| --- a/components/rappor/bloom_filter.cc |
| +++ b/components/rappor/bloom_filter.cc |
| @@ -9,6 +9,19 @@ |
| namespace rappor { |
| +namespace { |
| + |
| +uint32_t ComputeHash(const std::string& str, uint32_t seed) { |
| + // Using CityHash here because we have support for it in Dremel. Many hash |
| + // functions, such as MD5, SHA1, or Murmur, would probably also work. |
| + uint32_t index = |
| + CityHash64WithSeed(str.data(), str.size(), seed); |
| + return index; |
|
Alexei Svitkine (slow)
2015/04/24 18:10:01
Nit: Might as well return it directly.
Steven Holte
2015/04/24 18:39:57
Done.
|
| +} |
| + |
| +} // namespace |
| + |
| + |
|
Alexei Svitkine (slow)
2015/04/24 18:10:01
Nit: Remove empty line.
Steven Holte
2015/04/24 18:39:57
Done.
|
| BloomFilter::BloomFilter(uint32_t bytes_size, |
| uint32_t hash_function_count, |
| uint32_t hash_seed_offset) |
| @@ -25,10 +38,7 @@ void BloomFilter::SetString(const std::string& str) { |
| bytes_[i] = 0; |
| } |
| for (size_t i = 0; i < hash_function_count_; ++i) { |
| - // Using CityHash here because we have support for it in Dremel. Many hash |
| - // functions, such as MD5, SHA1, or Murmur, would probably also work. |
| - uint32_t index = |
| - CityHash64WithSeed(str.data(), str.size(), hash_seed_offset_ + i); |
| + uint32_t index = ComputeHash(str, hash_seed_offset_ + i); |
| // Note that the "bytes" are uint8_t, so they are always 8-bits. |
| uint32_t byte_index = (index / 8) % bytes_.size(); |
| uint32_t bit_index = index % 8; |
| @@ -43,4 +53,23 @@ void BloomFilter::SetBytesForTesting(const ByteVector& bytes) { |
| } |
| } |
| +namespace internal { |
| + |
| +uint64_t GetBloomBits(uint32_t bytes_size, |
| + uint32_t hash_function_count, |
| + uint32_t hash_seed_offset, |
| + const std::string& str) { |
| + // Make sure result fits in uint64 |
|
Alexei Svitkine (slow)
2015/04/24 18:10:01
Nit: add a period.
Steven Holte
2015/04/24 18:39:57
Done.
|
| + DCHECK_LE(bytes_size, 8u); |
| + uint64_t output = 0; |
| + uint32_t bits_size = bytes_size * 8; |
|
Alexei Svitkine (slow)
2015/04/24 18:10:01
Nit: const
Steven Holte
2015/04/24 18:39:57
Done.
|
| + for (size_t i = 0; i < hash_function_count; ++i) { |
| + uint32_t index = ComputeHash(str, hash_seed_offset + i); |
| + output |= 1 << (index % bits_size); |
| + } |
| + return output; |
| +} |
| + |
| +} // namespace internal |
| + |
| } // namespace rappor |