Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(573)

Unified Diff: base/hash.cc

Issue 181643004: Moved SuperFastHash function from base/hash.cc to base/third_party. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile error (-Wsign-compare). Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« base/hash.h ('K') | « base/hash.h ('k') | base/third_party/superfasthash/LICENSE » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698