xxHash
0.8.0
Extremely fast non-cryptographic hash function
|
Data Structures | |
struct | XXH128_hash_t |
The return value from 128-bit hashes. More... | |
struct | XXH128_canonical_t |
Macros | |
#define | XXH3_SECRET_SIZE_MIN 136 |
Typedefs | |
typedef struct XXH3_state_s | XXH3_state_t |
The state struct for the XXH3 streaming API. More... | |
Functions | |
XXH64_hash_t | XXH3_64bits (const void *data, size_t len) |
XXH64_hash_t | XXH3_64bits_withSeed (const void *data, size_t len, XXH64_hash_t seed) |
XXH64_hash_t | XXH3_64bits_withSecret (const void *data, size_t len, const void *secret, size_t secretSize) |
XXH3_state_t * | XXH3_createState (void) |
XXH_errorcode | XXH3_freeState (XXH3_state_t *statePtr) |
void | XXH3_copyState (XXH3_state_t *dst_state, const XXH3_state_t *src_state) |
XXH_errorcode | XXH3_64bits_reset (XXH3_state_t *statePtr) |
XXH_errorcode | XXH3_64bits_reset_withSeed (XXH3_state_t *statePtr, XXH64_hash_t seed) |
XXH_errorcode | XXH3_64bits_reset_withSecret (XXH3_state_t *statePtr, const void *secret, size_t secretSize) |
XXH_errorcode | XXH3_64bits_update (XXH3_state_t *statePtr, const void *input, size_t length) |
XXH64_hash_t | XXH3_64bits_digest (const XXH3_state_t *statePtr) |
XXH128_hash_t | XXH3_128bits (const void *data, size_t len) |
XXH128_hash_t | XXH3_128bits_withSeed (const void *data, size_t len, XXH64_hash_t seed) |
XXH128_hash_t | XXH3_128bits_withSecret (const void *data, size_t len, const void *secret, size_t secretSize) |
XXH_errorcode | XXH3_128bits_reset (XXH3_state_t *statePtr) |
XXH_errorcode | XXH3_128bits_reset_withSeed (XXH3_state_t *statePtr, XXH64_hash_t seed) |
XXH_errorcode | XXH3_128bits_reset_withSecret (XXH3_state_t *statePtr, const void *secret, size_t secretSize) |
XXH_errorcode | XXH3_128bits_update (XXH3_state_t *statePtr, const void *input, size_t length) |
XXH128_hash_t | XXH3_128bits_digest (const XXH3_state_t *statePtr) |
int | XXH128_isEqual (XXH128_hash_t h1, XXH128_hash_t h2) |
int | XXH128_cmp (const void *h128_1, const void *h128_2) |
void | XXH128_canonicalFromHash (XXH128_canonical_t *dst, XXH128_hash_t hash) |
XXH128_hash_t | XXH128_hashFromCanonical (const XXH128_canonical_t *src) |
XXH_errorcode | XXH3_64bits_reset_withSecretandSeed (XXH3_state_t *statePtr, const void *secret, size_t secretSize, XXH64_hash_t seed64) |
XXH128_hash_t | XXH3_128bits_withSecretandSeed (const void *data, size_t len, const void *secret, size_t secretSize, XXH64_hash_t seed64) |
XXH128_hash_t | XXH128 (const void *data, size_t len, XXH64_hash_t seed) |
XXH_errorcode | XXH3_128bits_reset_withSecretandSeed (XXH3_state_t *statePtr, const void *secret, size_t secretSize, XXH64_hash_t seed64) |
XXH_errorcode | XXH3_generateSecret (void *secretBuffer, size_t secretSize, const void *customSeed, size_t customSeedSize) |
void | XXH3_generateSecret_fromSeed (void *secretBuffer, XXH64_hash_t seed) |
XXH3 is a more recent hash algorithm featuring:
Speed analysis methodology is explained here:
https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html
Compared to XXH64, expect XXH3 to run approximately ~2x faster on large inputs and >3x faster on small ones, exact differences vary depending on platform.
XXH3's speed benefits greatly from SIMD and 64-bit arithmetic, but does not require it. Any 32-bit and 64-bit targets that can run XXH32 smoothly can run XXH3 at competitive speeds, even without vector support. Further details are explained in the implementation.
Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8, ZVector and scalar targets. This can be controlled via the XXH_VECTOR macro.
XXH3 implementation is portable: it has a generic C90 formulation that can be compiled on any platform, all implementations generage exactly the same hash value on all platforms. Starting from v0.8.0, it's also labelled "stable", meaning that any future version will also generate the same hash value.
XXH3 offers 2 variants, _64bits and _128bits.
When only 64 bits are needed, prefer invoking the _64bits variant, as it reduces the amount of mixing, resulting in faster speed on small inputs. It's also generally simpler to manipulate a scalar return type than a struct.
The API supports one-shot hashing, streaming mode, and custom secrets.
#define XXH3_SECRET_SIZE_MIN 136 |
The bare minimum size for a custom secret.
typedef struct XXH3_state_s XXH3_state_t |
The state struct for the XXH3 streaming API.
int XXH128_isEqual | ( | XXH128_hash_t | h1, |
XXH128_hash_t | h2 | ||
) |
XXH128_isEqual(): Return: 1 if h1
and h2
are equal, 0 if they are not.
int XXH128_cmp | ( | const void * | h128_1, |
const void * | h128_2 | ||
) |
This comparator is compatible with stdlib's qsort()
/bsearch()
.
return: >0 if *h128_1 > *h128_2 =0 if *h128_1 == *h128_2 <0 if *h128_1 < *h128_2