Class xxHash3
A feature complete hashing API based on xxHash3 (https://github.com/Cyan4973/xxHash)
Namespace: Unity.Collections
Assembly: Unity.Collections.dll
Syntax
public static class xxHash3
Remarks
Features:
- Compute 64bits or 128bits hash keys, based on a private key, with an optional given seed value.
- Hash on buffer (with or without a ulong based seed value)
- Hash on buffer while copying the data to a destination
- Use instances of xxHash3.StreamingState to accumulate data to hash in multiple calls, suited for small data, then retrieve the hash key at the end.
- xxHash3 has several implementation based on the size to hash to ensure best performances
- We currently have two implementations:
- A generic one based on Unity.Mathematics, that should always be executed compiled with Burst.
- An AVX2 based implementation for platforms supporting it, using Burst intrinsics.
- Whether or not the call site is compiled with burst, the hashing function will be executed by Burst() to ensure optimal performance. () Only when the hashing size justifies such transition.
Methods
Hash128(void*, long)
Compute a 128bits hash of a memory region
Declaration
public static uint4 Hash128(void* input, long length)
Parameters
Type | Name | Description |
---|---|---|
void* | input | The memory buffer, can't be null |
long | length | The length of the memory buffer, can be zero |
Returns
Type | Description |
---|---|
uint4 | The hash result |
Hash128(void*, long, ulong)
Compute a 128bits hash of a memory region using a given seed value
Declaration
public static uint4 Hash128(void* input, long length, ulong seed)
Parameters
Type | Name | Description |
---|---|---|
void* | input | The memory buffer, can't be null |
long | length | The length of the memory buffer, can be zero |
ulong | seed | The seed value to alter the hash computation from |
Returns
Type | Description |
---|---|
uint4 | The hash result |
Hash128(void*, void*, long)
Compute a 128bits hash while copying the data to a destination buffer
Declaration
public static uint4 Hash128(void* input, void* destination, long length)
Parameters
Type | Name | Description |
---|---|---|
void* | input | The memory buffer to compute the hash and copy from, can't be null |
void* | destination | The destination buffer, can't be null and must be at least big enough to match the input's length |
long | length | The length of the memory buffer, can be zero |
Returns
Type | Description |
---|---|
uint4 | The hash result |
Remarks
Use this API to avoid a double memory scan in situations where the hash as to be compute and the data copied at the same time. Performances improvements vary between 30-50% on big data.
Hash128(void*, void*, long, ulong)
Compute a 128bits hash while copying the data to a destination buffer using a given seed value
Declaration
public static uint4 Hash128(void* input, void* destination, long length, ulong seed)
Parameters
Type | Name | Description |
---|---|---|
void* | input | The memory buffer to compute the hash and copy from, can't be null |
void* | destination | The destination buffer, can't be null and must be at least big enough to match the input's length |
long | length | The length of the memory buffer, can be zero |
ulong | seed | The seed value to alter the hash computation from |
Returns
Type | Description |
---|---|
uint4 | The hash result |
Hash128<T>(in T)
Compute a 128bits hash from the contents of the input struct
Declaration
public static uint4 Hash128<T>(in T input) where T : unmanaged
Parameters
Type | Name | Description |
---|---|---|
T | input | The input struct that will be hashed |
Returns
Type | Description |
---|---|
uint4 | The hash result |
Type Parameters
Name | Description |
---|---|
T | The input type. |
Hash64(void*, long)
Compute a 64bits hash of a memory region
Declaration
public static uint2 Hash64(void* input, long length)
Parameters
Type | Name | Description |
---|---|---|
void* | input | The memory buffer, can't be null |
long | length | The length of the memory buffer, can be zero |
Returns
Type | Description |
---|---|
uint2 | The hash result |
Hash64(void*, long, ulong)
Compute a 64bits hash of a memory region using a given seed value
Declaration
public static uint2 Hash64(void* input, long length, ulong seed)
Parameters
Type | Name | Description |
---|---|---|
void* | input | The memory buffer, can't be null |
long | length | The length of the memory buffer, can be zero |
ulong | seed | The seed value to alter the hash computation from |
Returns
Type | Description |
---|---|
uint2 | The hash result |
Hash64<T>(in T)
Compute a 64bits hash from the contents of the input struct
Declaration
public static uint2 Hash64<T>(in T input) where T : unmanaged
Parameters
Type | Name | Description |
---|---|---|
T | input | The input struct that will be hashed |
Returns
Type | Description |
---|---|
uint2 | The hash result |
Type Parameters
Name | Description |
---|---|
T | The input type. |