| Index: base/hash.cc
|
| diff --git a/base/hash.cc b/base/hash.cc
|
| index 2c87065045bed70a1c2851ed4646bd4f6426393b..9088dbd42a7cf70405f42c8e200cdf3bfcba9c8f 100644
|
| --- a/base/hash.cc
|
| +++ b/base/hash.cc
|
| @@ -1,73 +1,17 @@
|
| -// From http://www.azillionmonkeys.com/qed/hash.html
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
|
|
| #include "base/hash.h"
|
|
|
| -typedef uint32 uint32_t;
|
| -typedef uint16 uint16_t;
|
| +// Definition in base/third_party/superfasthash/superfasthash.c. (Third-party
|
| +// code did not come with its own header file, so declaring the function here.)
|
| +extern "C" uint32_t SuperFastHash(const char* data, int len);
|
|
|
| namespace base {
|
|
|
| -#undef get16bits
|
| -#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
|
| - || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
|
| -#define get16bits(d) (*((const uint16_t *) (d)))
|
| -#endif
|
| -
|
| -#if !defined (get16bits)
|
| -#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
|
| - +(uint32_t)(((const uint8_t *)(d))[0]) )
|
| -#endif
|
| -
|
| -uint32 SuperFastHash(const char * data, int len) {
|
| - uint32_t hash = len, tmp;
|
| - int rem;
|
| -
|
| - if (len <= 0 || data == NULL)
|
| - return 0;
|
| -
|
| - rem = len & 3;
|
| - len >>= 2;
|
| -
|
| - /* Main loop */
|
| - for (; len > 0; len--) {
|
| - hash += get16bits(data);
|
| - tmp = (get16bits(data + 2) << 11) ^ hash;
|
| - hash = (hash << 16) ^ tmp;
|
| - data += 2 * sizeof(uint16_t);
|
| - hash += hash >> 11;
|
| - }
|
| -
|
| - /* Handle end cases */
|
| - switch (rem) {
|
| - case 3:
|
| - hash += get16bits(data);
|
| - hash ^= hash << 16;
|
| -
|
| - // Treat the final character as signed. This ensures all platforms behave
|
| - // consistently with the original x86 code.
|
| - hash ^= static_cast<signed char>(data[sizeof(uint16_t)]) << 18;
|
| - hash += hash >> 11;
|
| - break;
|
| - case 2:
|
| - hash += get16bits(data);
|
| - hash ^= hash << 11;
|
| - hash += hash >> 17;
|
| - break;
|
| - case 1:
|
| - hash += static_cast<signed char>(*data);
|
| - hash ^= hash << 10;
|
| - hash += hash >> 1;
|
| - }
|
| -
|
| - /* Force "avalanching" of final 127 bits */
|
| - hash ^= hash << 3;
|
| - hash += hash >> 5;
|
| - hash ^= hash << 4;
|
| - hash += hash >> 17;
|
| - hash ^= hash << 25;
|
| - hash += hash >> 6;
|
| -
|
| - return hash;
|
| +uint32 SuperFastHash(const char* data, int len) {
|
| + return ::SuperFastHash(data, len);
|
| }
|
|
|
| } // namespace base
|
|
|