OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/rappor/bloom_filter.h" | 5 #include "components/rappor/bloom_filter.h" |
6 | 6 |
| 7 #include <stddef.h> |
| 8 |
7 #include "base/logging.h" | 9 #include "base/logging.h" |
8 #include "third_party/smhasher/src/City.h" | 10 #include "third_party/smhasher/src/City.h" |
9 | 11 |
10 namespace rappor { | 12 namespace rappor { |
11 | 13 |
12 namespace { | 14 namespace { |
13 | 15 |
14 uint32_t ComputeHash(const std::string& str, uint32_t seed) { | 16 uint32_t ComputeHash(const std::string& str, uint32_t seed) { |
15 // Using CityHash here because we have support for it in Dremel. Many hash | 17 // Using CityHash here because we have support for it in Dremel. Many hash |
16 // functions, such as MD5, SHA1, or Murmur, would probably also work. | 18 // functions, such as MD5, SHA1, or Murmur, would probably also work. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 bytes_[i] = bytes[i]; | 51 bytes_[i] = bytes[i]; |
50 } | 52 } |
51 } | 53 } |
52 | 54 |
53 namespace internal { | 55 namespace internal { |
54 | 56 |
55 uint64_t GetBloomBits(uint32_t bytes_size, | 57 uint64_t GetBloomBits(uint32_t bytes_size, |
56 uint32_t hash_function_count, | 58 uint32_t hash_function_count, |
57 uint32_t hash_seed_offset, | 59 uint32_t hash_seed_offset, |
58 const std::string& str) { | 60 const std::string& str) { |
59 // Make sure result fits in uint64. | 61 // Make sure result fits in uint64_t. |
60 DCHECK_LE(bytes_size, 8u); | 62 DCHECK_LE(bytes_size, 8u); |
61 uint64_t output = 0; | 63 uint64_t output = 0; |
62 const uint32_t bits_size = bytes_size * 8; | 64 const uint32_t bits_size = bytes_size * 8; |
63 for (size_t i = 0; i < hash_function_count; ++i) { | 65 for (size_t i = 0; i < hash_function_count; ++i) { |
64 uint32_t index = ComputeHash(str, hash_seed_offset + i); | 66 uint32_t index = ComputeHash(str, hash_seed_offset + i); |
65 output |= 1ULL << uint64_t(index % bits_size); | 67 output |= 1ULL << uint64_t(index % bits_size); |
66 } | 68 } |
67 return output; | 69 return output; |
68 } | 70 } |
69 | 71 |
70 } // namespace internal | 72 } // namespace internal |
71 | 73 |
72 } // namespace rappor | 74 } // namespace rappor |
OLD | NEW |