Blender  V3.3
Macros | Functions
hash_mm2a.c File Reference
#include "BLI_compiler_attrs.h"
#include "BLI_hash_mm2a.h"

Go to the source code of this file.

Macros

#define MM2A_M   0x5bd1e995
 
#define MM2A_MIX(h, k)
 
#define MM2A_MIX_FINALIZE(h)
 

Functions

static void mm2a_mix_tail (BLI_HashMurmur2A *mm2, const unsigned char **data, size_t *len)
 
void BLI_hash_mm2a_init (BLI_HashMurmur2A *mm2, uint32_t seed)
 
void BLI_hash_mm2a_add (BLI_HashMurmur2A *mm2, const unsigned char *data, size_t len)
 
void BLI_hash_mm2a_add_int (BLI_HashMurmur2A *mm2, int data)
 
uint32_t BLI_hash_mm2a_end (BLI_HashMurmur2A *mm2)
 
uint32_t BLI_hash_mm2 (const unsigned char *data, size_t len, uint32_t seed)
 

Detailed Description

Functions to compute Murmur2A hash key.

A very fast hash generating int32 result, with few collisions and good repartition.

See also: reference implementation:

Warning
Do not store that hash in files or such, it is not endian-agnostic, so you should only use it for temporary data.

Definition in file hash_mm2a.c.

Macro Definition Documentation

◆ MM2A_M

#define MM2A_M   0x5bd1e995

Definition at line 25 of file hash_mm2a.c.

◆ MM2A_MIX

#define MM2A_MIX (   h,
 
)
Value:
{ \
(k) *= MM2A_M; \
(k) ^= (k) >> 24; \
(k) *= MM2A_M; \
(h) = ((h)*MM2A_M) ^ (k); \
} \
(void)0
SyclQueue void void size_t num_bytes void
#define MM2A_M
Definition: hash_mm2a.c:25

Definition at line 27 of file hash_mm2a.c.

◆ MM2A_MIX_FINALIZE

#define MM2A_MIX_FINALIZE (   h)
Value:
{ \
(h) ^= (h) >> 13; \
(h) *= MM2A_M; \
(h) ^= (h) >> 15; \
} \
(void)0

Definition at line 36 of file hash_mm2a.c.

Function Documentation

◆ BLI_hash_mm2()

uint32_t BLI_hash_mm2 ( const unsigned char *  data,
size_t  len,
uint32_t  seed 
)

Non-incremental version, quicker for small keys.

Definition at line 99 of file hash_mm2a.c.

References ATTR_FALLTHROUGH, data, len, MM2A_M, MM2A_MIX, MM2A_MIX_FINALIZE, and seed.

Referenced by BLI_ghashutil_inthash_p_murmur(), BLI_ghashutil_strhash_p_murmur(), BLI_ghashutil_uinthash_v4_murmur(), and FrsMaterial_hash().

◆ BLI_hash_mm2a_add()

void BLI_hash_mm2a_add ( BLI_HashMurmur2A mm2,
const unsigned char *  data,
size_t  len 
)

◆ BLI_hash_mm2a_add_int()

void BLI_hash_mm2a_add_int ( BLI_HashMurmur2A mm2,
int  data 
)

◆ BLI_hash_mm2a_end()

uint32_t BLI_hash_mm2a_end ( BLI_HashMurmur2A mm2)

◆ BLI_hash_mm2a_init()

void BLI_hash_mm2a_init ( BLI_HashMurmur2A mm2,
uint32_t  seed 
)

◆ mm2a_mix_tail()

static void mm2a_mix_tail ( BLI_HashMurmur2A mm2,
const unsigned char **  data,
size_t *  len 
)
static