From db66df3bcee0c6b8fdc9f94879efa805e4001d83 Mon Sep 17 00:00:00 2001 From: Alexey Spiridonov Date: Wed, 18 Mar 2015 17:12:09 -0700 Subject: [PATCH] Add comment about djb2 hash Summary: In my tests, using djb2 was much worse for any sizable workload. Just use SpookyHashV2. Test Plan: comment only Reviewed By: tudorb@fb.com Subscribers: trunkagent, folly-diffs@, yfeldblum FB internal diff: D1906439 Signature: t1:1906439:1426117575:f88b7b28b578092c1716433e21150d423d4e94a7 --- folly/Range.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/folly/Range.h b/folly/Range.h index 72b1345e..7401af6b 100644 --- a/folly/Range.h +++ b/folly/Range.h @@ -426,6 +426,11 @@ public: return b_[i]; } + // Do NOT use this function, which was left behind for backwards + // compatibility. Use SpookyHashV2 instead -- it is faster, and produces + // a 64-bit hash, which means dramatically fewer collisions in large maps. + // (The above advice does not apply if you are targeting a 32-bit system.) + // // Works only for Range and Range uint32_t hash() const { // Taken from fbi/nstring.h: @@ -916,6 +921,7 @@ operator>=(const T& lhs, const U& rhs) { return StringPiece(lhs) >= StringPiece(rhs); } +// Do NOT use this, use SpookyHashV2 instead, see commment on hash() above. struct StringPieceHash { std::size_t operator()(const StringPiece str) const { return static_cast(str.hash()); -- 2.34.1