diff options
| author | flow <flowlnlnln@gmail.com> | 2022-06-03 19:02:11 -0300 | 
|---|---|---|
| committer | flow <flowlnlnln@gmail.com> | 2022-07-17 11:33:41 -0300 | 
| commit | 32a9545360b10058cf84b951ee88959adf3bf374 (patch) | |
| tree | 6a7f55747945f6beec5582767ce102f219f84f82 /libraries/murmur2/src | |
| parent | 9a44c9221139428fa4e3bdf560f6bfdc6fcbe75d (diff) | |
| download | PrismLauncher-32a9545360b10058cf84b951ee88959adf3bf374.tar.gz PrismLauncher-32a9545360b10058cf84b951ee88959adf3bf374.tar.bz2 PrismLauncher-32a9545360b10058cf84b951ee88959adf3bf374.zip | |
libs: add murmur2 library
Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'libraries/murmur2/src')
| -rw-r--r-- | libraries/murmur2/src/MurmurHash2.cpp | 86 | ||||
| -rw-r--r-- | libraries/murmur2/src/MurmurHash2.h | 30 | 
2 files changed, 116 insertions, 0 deletions
| diff --git a/libraries/murmur2/src/MurmurHash2.cpp b/libraries/murmur2/src/MurmurHash2.cpp new file mode 100644 index 00000000..3e52e6d1 --- /dev/null +++ b/libraries/murmur2/src/MurmurHash2.cpp @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------------- +// MurmurHash2 was written by Austin Appleby, and is placed in the public +// domain. The author hereby disclaims copyright to this source code. + +// Note - This code makes a few assumptions about how your machine behaves - + +// 1. We can read a 4-byte value from any address without crashing +// 2. sizeof(int) == 4 + +// And it has a few limitations - + +// 1. It will not work incrementally. +// 2. It will not produce the same results on little-endian and big-endian +//    machines. + +#include "MurmurHash2.h" + +//----------------------------------------------------------------------------- +// Platform-specific functions and macros + +// Microsoft Visual Studio + +#if defined(_MSC_VER) + +#define BIG_CONSTANT(x) (x) + +// Other compilers + +#else	// defined(_MSC_VER) + +#define BIG_CONSTANT(x) (x##LLU) + +#endif // !defined(_MSC_VER) + +//----------------------------------------------------------------------------- + +uint64_t MurmurHash2 ( const void* key, int len, uint32_t seed ) +{ +  // 'm' and 'r' are mixing constants generated offline. +  // They're not really 'magic', they just happen to work well. + +  const uint32_t m = 0x5bd1e995; +  const int r = 24; + +  // Initialize the hash to a 'random' value + +  uint32_t h = seed ^ len; + +  // Mix 4 bytes at a time into the hash +  const auto* data = (const unsigned char*) key; +  while(len >= 4) +  { +    uint32_t k = *(uint32_t*)data; + +    k *= m; +    k ^= k >> r; +    k *= m; + +    h *= m; +    h ^= k; + +    data += 4*sizeof(char); +    len -= 4; +  } + +  // Handle the last few bytes of the input array + +  switch(len) +  { +  case 3: h ^= data[2] << 16; +  case 2: h ^= data[1] << 8; +  case 1: h ^= data[0]; +      h *= m; +  }; + +  // Do a few final mixes of the hash to ensure the last few +  // bytes are well-incorporated. + +  h ^= h >> 13; +  h *= m; +  h ^= h >> 15; + +  return h; +}  + +//----------------------------------------------------------------------------- diff --git a/libraries/murmur2/src/MurmurHash2.h b/libraries/murmur2/src/MurmurHash2.h new file mode 100644 index 00000000..c7b83bca --- /dev/null +++ b/libraries/murmur2/src/MurmurHash2.h @@ -0,0 +1,30 @@ +//----------------------------------------------------------------------------- +// MurmurHash2 was written by Austin Appleby, and is placed in the public +// domain. The author hereby disclaims copyright to this source code. + +#pragma once + +//----------------------------------------------------------------------------- +// Platform-specific functions and macros + +// Microsoft Visual Studio + +#if defined(_MSC_VER) && (_MSC_VER < 1600) + +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; +typedef unsigned __int64 uint64_t; + +// Other compilers + +#else	// defined(_MSC_VER) + +#include <stdint.h> + +#endif // !defined(_MSC_VER) + +//----------------------------------------------------------------------------- + +uint64_t MurmurHash2        ( const void* key, int len, uint32_t seed = 1 ); + +//----------------------------------------------------------------------------- | 
