murmurhash3.c revision 5a70b84cb66fb8c7a3fce0e3f2e4b61e0b2ea9d4
842ae4bd224140319ae7feec1872b93dfd491143fielding/* This file is based on the public domain MurmurHash3 from Austin Appleby:
842ae4bd224140319ae7feec1872b93dfd491143fielding * http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp
842ae4bd224140319ae7feec1872b93dfd491143fielding * We use only the 32 bit variant because the 2 produce different result while
842ae4bd224140319ae7feec1872b93dfd491143fielding * we need to produce the same result regardless of the architecture as
842ae4bd224140319ae7feec1872b93dfd491143fielding * clients can be both 64 or 32 bit at the same time.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd return (x << r) | (x >> (32 - r));
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd/* slower than original but is endian neutral and handles platforms that
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * do only aligned reads */
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse * Finalization mix - force all bits of a hash block to avalanche
71c00f988beb28388702e14cb7fe06f08bd792bbdougm h ^= h >> 16;
71c00f988beb28388702e14cb7fe06f08bd792bbdougm h *= 0x85ebca6b;
7933d4a963def02417113b6798d87a36395053b0rse h ^= h >> 13;
71c00f988beb28388702e14cb7fe06f08bd792bbdougm h *= 0xc2b2ae35;
71c00f988beb28388702e14cb7fe06f08bd792bbdougm h ^= h >> 16;
7933d4a963def02417113b6798d87a36395053b0rseuint32_t murmurhash3(const char *key, int len, uint32_t seed)
7933d4a963def02417113b6798d87a36395053b0rse /* body */
7933d4a963def02417113b6798d87a36395053b0rse for (i = 0; i < nblocks; i++) {
7933d4a963def02417113b6798d87a36395053b0rse /* tail */
e335319a08e12eb7daff9afa80e985dc53f652b8jorton /* finalization */