diff options
author | kumquat-ir <66188216+kumquat-ir@users.noreply.github.com> | 2022-07-18 14:05:23 -0400 |
---|---|---|
committer | kumquat-ir <66188216+kumquat-ir@users.noreply.github.com> | 2022-07-18 14:05:23 -0400 |
commit | 20b1723e78149c1f2ac4072cbd46997e9c5160fa (patch) | |
tree | 7d97c8bc2edfe5cb41b91e6d04ba36da8aa163e6 /libraries | |
parent | be78afeee54a19cd0115e1d2ec63f3a3201a3940 (diff) | |
parent | dec81c4f274dd8388d442062cf9fa18600aa850d (diff) | |
download | PrismLauncher-20b1723e78149c1f2ac4072cbd46997e9c5160fa.tar.gz PrismLauncher-20b1723e78149c1f2ac4072cbd46997e9c5160fa.tar.bz2 PrismLauncher-20b1723e78149c1f2ac4072cbd46997e9c5160fa.zip |
merge origin/develop
Signed-off-by: kumquat-ir <66188216+kumquat-ir@users.noreply.github.com>
Diffstat (limited to 'libraries')
-rw-r--r-- | libraries/README.md | 6 | ||||
-rw-r--r-- | libraries/murmur2/CMakeLists.txt | 12 | ||||
-rw-r--r-- | libraries/murmur2/src/MurmurHash2.cpp | 86 | ||||
-rw-r--r-- | libraries/murmur2/src/MurmurHash2.h | 30 |
4 files changed, 134 insertions, 0 deletions
diff --git a/libraries/README.md b/libraries/README.md index 360c34b1..946e34d8 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -149,6 +149,12 @@ BSD licensed, derived from [QtSingleApplication](https://github.com/qtproject/qt Changes are made to make the code more generic and useful in less usual conditions. +## murmur2 + +Canonical implementation of the murmur2 hash, taken from [SMHasher](https://github.com/aappleby/smhasher). + +Public domain (the author disclaimed the copyright). + ## optional-bare A simple single-file header-only version of a C++17-like optional for default-constructible, copyable types, for C++98 and later. diff --git a/libraries/murmur2/CMakeLists.txt b/libraries/murmur2/CMakeLists.txt new file mode 100644 index 00000000..f3068201 --- /dev/null +++ b/libraries/murmur2/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.9.4) +project(murmur2) + +set(MURMUR_SOURCES + src/MurmurHash2.h + src/MurmurHash2.cpp +) + +add_library(Launcher_murmur2 STATIC ${MURMUR_SOURCES}) +target_include_directories(Launcher_murmur2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "src" ) + +generate_export_header(Launcher_murmur2) 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 ); + +//----------------------------------------------------------------------------- |