Index: components/rappor/bloom_filter.cc |
diff --git a/components/rappor/bloom_filter.cc b/components/rappor/bloom_filter.cc |
index 9ad8f3ca0ce9d68191e8896229dbf3d44c2e1fcc..96edb21cd934b65df7c92cff51f4a225d3aea649 100644 |
--- a/components/rappor/bloom_filter.cc |
+++ b/components/rappor/bloom_filter.cc |
@@ -43,4 +43,24 @@ 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) { |
+ DCHECK_LE(bytes_size, 8u); |
Alexei Svitkine (slow)
2015/04/23 21:42:34
Add a comment above this check (i.e. in order for
Steven Holte
2015/04/24 16:59:05
Done.
|
+ uint64_t output = 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); |
Alexei Svitkine (slow)
2015/04/23 21:42:34
Nit: Make a helper in the anon namespace that wrap
Steven Holte
2015/04/24 16:59:05
Done.
|
+ output |= 1 << (index % (bytes_size * 8)); |
Alexei Svitkine (slow)
2015/04/23 21:42:34
Nit: Move bytes_size * 8 to a variable outside the
Steven Holte
2015/04/24 16:59:05
Done.
|
+ } |
+ return output; |
+} |
+ |
+} // namespace internal |
+ |
} // namespace rappor |