Classes | |
struct | XXH32_canonical_t |
Canonical (big endian) representation of XXH32_hash_t. More... | |
Macros | |
#define | XXH32_createState(void) XXH_NAME2(XXH_NAMESPACE, XXH32_createState) |
Allocates an XXH32_state_t. More... | |
#define | XXH32_state_t XXH_IPREF(XXH32_state_t) |
The opaque state struct for the XXH32 streaming API. More... | |
#define | XXH_FALLTHROUGH |
#define | XXH_HAS_ATTRIBUTE(x) __has_attribute(x) |
#define | XXH_HAS_C_ATTRIBUTE(x) 0 |
#define | XXH_HAS_CPP_ATTRIBUTE(x) 0 |
Typedefs | |
typedef struct XXH32_state_s | XXH32_state_t |
Contains functions used in the classic 32-bit xxHash algorithm.
XXH_PUBLIC_API XXH32_state_t * XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) |
Allocates an XXH32_state_t.
Must be freed with XXH32_freeState().
NULL
on failure. The opaque state struct for the XXH32 streaming API.
Streaming functions generate the xxHash value from an incremental input. This method is slower than single-call functions, due to state management. For small inputs, prefer XXH32()
and XXH64()
, which are better optimized.
An XXH state must first be allocated using XXH*_createState()
.
Start a new hash by initializing the state with a seed using XXH*_reset()
.
Then, feed the hash state by calling XXH*_update()
as many times as necessary.
The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
Finally, a hash value can be produced anytime, by using XXH*_digest()
. This function returns the nn-bits hash as an int or long long.
It's still possible to continue inserting input into the hash state after a digest, and generate new hash values later on by invoking XXH*_digest()
.
When done, release the state using XXH*_freeState()
.
Example code for incrementally hashing a file:
#define XXH_HAS_ATTRIBUTE | ( | x | ) | __has_attribute(x) |
typedef struct XXH32_state_s XXH32_state_t |
XXH_PUBLIC_API XXH32_hash_t XXH32 | ( | const void * | input, |
size_t | length, | ||
XXH32_hash_t | seed | ||
) |
Calculates the 32-bit hash of input
using xxHash32.
Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s
input | The block of data to be hashed, at least length bytes in size. |
length | The length of input , in bytes. |
seed | The 32-bit seed to alter the hash's output predictably. |
input
and input
+ length
must be valid, readable, contiguous memory. However, if length
is 0
, input
may be NULL
. In C++, this also must be TriviallyCopyable.XXH_PUBLIC_API void XXH32_canonicalFromHash | ( | XXH32_canonical_t * | dst, |
XXH32_hash_t | hash | ||
) |
Converts an XXH32_hash_t to a big endian XXH32_canonical_t.
dst | The XXH32_canonical_t pointer to be stored to. |
hash | The XXH32_hash_t to be converted. |
dst
must not be NULL
.The default return values from XXH functions are unsigned 32 and 64 bit integers.
The canonical representation uses big endian convention, the same convention as human-readable numbers (large digits first).
This way, hash values can be written into a file or buffer, remaining comparable across different systems.
The following functions allow transformation of hash values to and from their canonical format.
XXH_PUBLIC_API void XXH32_copyState | ( | XXH32_state_t * | dst_state, |
const XXH32_state_t * | src_state | ||
) |
Copies one XXH32_state_t to another.
dst_state | The state to copy to. |
src_state | The state to copy from. |
dst_state
and src_state
must not be NULL
and must not overlap. XXH_PUBLIC_API XXH32_hash_t XXH32_digest | ( | const XXH32_state_t * | statePtr | ) |
Returns the calculated hash value from an XXH32_state_t.
statePtr
, so you can update, digest, and update again.statePtr | The state struct to calculate the hash from. |
statePtr
must not be NULL
.XXH_PUBLIC_API XXH_errorcode XXH32_freeState | ( | XXH32_state_t * | statePtr | ) |
Frees an XXH32_state_t.
Must be allocated with XXH32_createState().
statePtr | A pointer to an XXH32_state_t allocated with XXH32_createState(). |
XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical | ( | const XXH32_canonical_t * | src | ) |
Converts an XXH32_canonical_t to a native XXH32_hash_t.
src | The XXH32_canonical_t to convert. |
src
must not be NULL
.XXH_PUBLIC_API XXH_errorcode XXH32_reset | ( | XXH32_state_t * | statePtr, |
XXH32_hash_t | seed | ||
) |
Resets an XXH32_state_t to begin a new hash.
This function resets and seeds a state. Call it before XXH32_update().
statePtr | The state struct to reset. |
seed | The 32-bit seed to alter the hash result predictably. |
statePtr
must not be NULL
.XXH_PUBLIC_API XXH_errorcode XXH32_update | ( | XXH32_state_t * | statePtr, |
const void * | input, | ||
size_t | length | ||
) |
Consumes a block of input
to an XXH32_state_t.
Call this to incrementally consume blocks of data.
statePtr | The state struct to update. |
input | The block of data to be hashed, at least length bytes in size. |
length | The length of input , in bytes. |
statePtr
must not be NULL
. input
and input
+ length
must be valid, readable, contiguous memory. However, if length
is 0
, input
may be NULL
. In C++, this also must be TriviallyCopyable.