Go to the source code of this file.
Macros | |
#define | FORCE_INLINE static |
#define | MEM_MODULE |
#define | PROCESS1 |
#define | PROCESS1_64 |
#define | PROCESS4 |
#define | PROCESS4_64 |
#define | PROCESS8_64 |
#define | XXH_ACCEPT_NULL_INPUT_POINTER 0 |
#define | XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() |
#define | XXH_FORCE_ALIGN_CHECK 1 |
#define | XXH_FORCE_NATIVE_FORMAT 0 |
#define | XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) |
#define | XXH_get32bits(p) XXH_readLE32_align(p, endian, align) |
#define | XXH_get64bits(p) XXH_readLE64_align(p, endian, align) |
#define | XXH_rotl32(x, r) ((x << r) | (x >> (32 - r))) |
#define | XXH_rotl64(x, r) ((x << r) | (x >> (64 - r))) |
#define | XXH_STATIC_ASSERT(c) { enum { XXH_sa = 1/(int)(!!(c)) }; } /* use after variable declarations */ |
#define | XXH_STATIC_LINKING_ONLY |
Typedefs | |
typedef unsigned char | BYTE |
typedef unsigned short | U16 |
typedef unsigned int | U32 |
typedef unsigned long long | U64 |
Enumerations | |
enum | XXH_alignment { XXH_aligned, XXH_unaligned, XXH_aligned, XXH_unaligned } |
enum | XXH_endianess { XXH_bigEndian =0, XXH_littleEndian =1 } |
Variables | |
static const U32 | PRIME32_1 = 2654435761U |
static const U32 | PRIME32_2 = 2246822519U |
static const U32 | PRIME32_3 = 3266489917U |
static const U32 | PRIME32_4 = 668265263U |
static const U32 | PRIME32_5 = 374761393U |
static const U64 | PRIME64_1 = 11400714785074694791ULL |
static const U64 | PRIME64_2 = 14029467366897019727ULL |
static const U64 | PRIME64_3 = 1609587929392839161ULL |
static const U64 | PRIME64_4 = 9650029242287828579ULL |
static const U64 | PRIME64_5 = 2870177450012600261ULL |
#define PROCESS1 |
#define PROCESS1_64 |
#define PROCESS4 |
#define PROCESS4_64 |
#define PROCESS8_64 |
#define XXH_ACCEPT_NULL_INPUT_POINTER 0 |
XXH_FORCE_MEMORY_ACCESS : By default, access to unaligned memory is controlled by memcpy()
, which is safe and portable. Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal. The below switch allow to select different access method for improved performance. Method 0 (default) : use memcpy()
. Safe and portable. Method 1 : __packed
statement. It depends on compiler extension (ie, not portable). This method is safe if your compiler supports it, and generally as fast or faster than memcpy
. Method 2 : direct access. This method doesn't depend on compiler but violate C standard. It can generate buggy code on targets which do not support unaligned memory accesses. But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6) See http://stackoverflow.com/a/32095106/646947 for details. Prefer these methods in priority order (0 > 1 > 2)
XXH_ACCEPT_NULL_INPUT_POINTER : If input pointer is NULL, xxHash default behavior is to dereference it, triggering a segfault. When this macro is enabled, xxHash actively checks input for null pointer. It it is, result for null input pointers is the same as a null-length input.
#define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() |
#define XXH_FORCE_ALIGN_CHECK 1 |
XXH_FORCE_ALIGN_CHECK : This is a minor performance trick, only useful with lots of very small keys. It means : check for aligned/unaligned input. The check costs one initial branch per hash; set it to 0 when the input is guaranteed to be aligned, or when alignment doesn't matter for performance.
#define XXH_FORCE_NATIVE_FORMAT 0 |
XXH_FORCE_NATIVE_FORMAT : By default, xxHash library provides endian-independent Hash values, based on little-endian convention. Results are therefore identical for little-endian and big-endian CPU. This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format. Should endian-independence be of no importance for your application, you may set the #define below to 1, to improve speed for Big-endian CPU. This option has no impact on Little_Endian CPU.
#define XXH_get32bits | ( | p | ) | XXH_readLE32_align(p, endian, align) |
#define XXH_get64bits | ( | p | ) | XXH_readLE64_align(p, endian, align) |
#define XXH_STATIC_ASSERT | ( | c | ) | { enum { XXH_sa = 1/(int)(!!(c)) }; } /* use after variable declarations */ |
enum XXH_alignment |
enum XXH_endianess |
XXH_PUBLIC_API XXH32_hash_t XXH32 | ( | const void * | input, |
size_t | length, | ||
unsigned int | seed | ||
) |
XXH32() : Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input". The memory between input & input+length must be valid (allocated and read-accessible). "seed" can be used to alter the result predictably. Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s
XXH_PUBLIC_API void XXH32_canonicalFromHash | ( | XXH32_canonical_t * | dst, |
XXH32_hash_t | hash | ||
) |
Default XXH result types are basic unsigned 32 and 64 bits. The canonical representation follows human-readable write convention, aka big-endian (large digits first). These functions allow transformation of hash result into and from its canonical format. This way, hash values can be written into a file or buffer, remaining comparable across different systems.
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 * | dstState, |
const XXH32_state_t * | srcState | ||
) |
XXH_PUBLIC_API XXH32_state_t* XXH32_createState | ( | void | ) |
XXH_PUBLIC_API XXH32_hash_t XXH32_digest | ( | const XXH32_state_t * | state_in | ) |
FORCE_INLINE U32 XXH32_digest_endian | ( | const XXH32_state_t * | state, |
XXH_endianess | endian | ||
) |
FORCE_INLINE U32 XXH32_endian_align | ( | const void * | input, |
size_t | len, | ||
U32 | seed, | ||
XXH_endianess | endian, | ||
XXH_alignment | align | ||
) |
|
static |
XXH_PUBLIC_API XXH_errorcode XXH32_freeState | ( | XXH32_state_t * | statePtr | ) |
XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical | ( | const XXH32_canonical_t * | src | ) |
XXH_PUBLIC_API XXH_errorcode XXH32_reset | ( | XXH32_state_t * | statePtr, |
unsigned int | seed | ||
) |
XXH_PUBLIC_API XXH_errorcode XXH32_update | ( | XXH32_state_t * | state_in, |
const void * | input, | ||
size_t | len | ||
) |
FORCE_INLINE XXH_errorcode XXH32_update_endian | ( | XXH32_state_t * | state, |
const void * | input, | ||
size_t | len, | ||
XXH_endianess | endian | ||
) |
XXH_PUBLIC_API XXH64_hash_t XXH64 | ( | const void * | input, |
size_t | length, | ||
unsigned long long | seed | ||
) |
XXH_PUBLIC_API void XXH64_canonicalFromHash | ( | XXH64_canonical_t * | dst, |
XXH64_hash_t | hash | ||
) |
XXH_PUBLIC_API void XXH64_copyState | ( | XXH64_state_t * | dstState, |
const XXH64_state_t * | srcState | ||
) |
XXH_PUBLIC_API XXH64_state_t* XXH64_createState | ( | void | ) |
XXH_PUBLIC_API XXH64_hash_t XXH64_digest | ( | const XXH64_state_t * | state_in | ) |
FORCE_INLINE U64 XXH64_digest_endian | ( | const XXH64_state_t * | state, |
XXH_endianess | endian | ||
) |
FORCE_INLINE U64 XXH64_endian_align | ( | const void * | input, |
size_t | len, | ||
U64 | seed, | ||
XXH_endianess | endian, | ||
XXH_alignment | align | ||
) |
|
static |
XXH_PUBLIC_API XXH_errorcode XXH64_freeState | ( | XXH64_state_t * | statePtr | ) |
XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical | ( | const XXH64_canonical_t * | src | ) |
XXH_PUBLIC_API XXH_errorcode XXH64_reset | ( | XXH64_state_t * | statePtr, |
unsigned long long | seed | ||
) |
XXH_PUBLIC_API XXH_errorcode XXH64_update | ( | XXH64_state_t * | state_in, |
const void * | input, | ||
size_t | len | ||
) |
FORCE_INLINE XXH_errorcode XXH64_update_endian | ( | XXH64_state_t * | state, |
const void * | input, | ||
size_t | len, | ||
XXH_endianess | endian | ||
) |
|
static |
|
static |
FORCE_INLINE U32 XXH_readLE32 | ( | const void * | ptr, |
XXH_endianess | endian | ||
) |
FORCE_INLINE U32 XXH_readLE32_align | ( | const void * | ptr, |
XXH_endianess | endian, | ||
XXH_alignment | align | ||
) |
FORCE_INLINE U64 XXH_readLE64 | ( | const void * | ptr, |
XXH_endianess | endian | ||
) |
FORCE_INLINE U64 XXH_readLE64_align | ( | const void * | ptr, |
XXH_endianess | endian, | ||
XXH_alignment | align | ||
) |
XXH_PUBLIC_API unsigned XXH_versionNumber | ( | void | ) |