| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "absl/hash/internal/hash.h" |
|
|
| namespace absl { |
| ABSL_NAMESPACE_BEGIN |
| namespace hash_internal { |
|
|
| uint64_t MixingHashState::CombineLargeContiguousImpl32( |
| uint64_t state, const unsigned char* first, size_t len) { |
| while (len >= PiecewiseChunkSize()) { |
| state = Mix(state, |
| hash_internal::CityHash32(reinterpret_cast<const char*>(first), |
| PiecewiseChunkSize())); |
| len -= PiecewiseChunkSize(); |
| first += PiecewiseChunkSize(); |
| } |
| |
| return CombineContiguousImpl(state, first, len, |
| std::integral_constant<int, 4>{}); |
| } |
|
|
| uint64_t MixingHashState::CombineLargeContiguousImpl64( |
| uint64_t state, const unsigned char* first, size_t len) { |
| while (len >= PiecewiseChunkSize()) { |
| state = Mix(state, Hash64(first, PiecewiseChunkSize())); |
| len -= PiecewiseChunkSize(); |
| first += PiecewiseChunkSize(); |
| } |
| |
| return CombineContiguousImpl(state, first, len, |
| std::integral_constant<int, 8>{}); |
| } |
|
|
| ABSL_CONST_INIT const void* const MixingHashState::kSeed = &kSeed; |
|
|
| |
| |
| |
| |
| |
| |
| |
| constexpr uint64_t kHashSalt[5] = { |
| uint64_t{0x243F6A8885A308D3}, uint64_t{0x13198A2E03707344}, |
| uint64_t{0xA4093822299F31D0}, uint64_t{0x082EFA98EC4E6C89}, |
| uint64_t{0x452821E638D01377}, |
| }; |
|
|
| uint64_t MixingHashState::LowLevelHashImpl(const unsigned char* data, |
| size_t len) { |
| return LowLevelHash(data, len, Seed(), kHashSalt); |
| } |
|
|
| } |
| ABSL_NAMESPACE_END |
| } |
|
|