mirror of
https://github.com/linux-msm/qrtr.git
synced 2026-01-21 10:47:25 +01:00
38 lines
665 B
C
38 lines
665 B
C
#include <string.h>
|
|
#include "hash.h"
|
|
|
|
unsigned int hash_mem(const void *data, unsigned int len)
|
|
{
|
|
unsigned int h;
|
|
unsigned int i;
|
|
|
|
h = len;
|
|
|
|
for (i = 0; i < len; ++i)
|
|
h = ((h >> 27) ^ (h << 5)) ^ ((const unsigned char *)data)[i];
|
|
|
|
return h;
|
|
}
|
|
|
|
unsigned int hash_string(const char *value)
|
|
{
|
|
return hash_mem(value, strlen(value));
|
|
}
|
|
|
|
unsigned int hash_u32(uint32_t value)
|
|
{
|
|
return value * 2654435761UL;
|
|
}
|
|
|
|
unsigned int hash_u64(uint64_t value)
|
|
{
|
|
return hash_u32(value & 0xffffffff) ^ hash_u32(value >> 32);
|
|
}
|
|
|
|
unsigned int hash_pointer(void *value)
|
|
{
|
|
if (sizeof(value) == sizeof(uint64_t))
|
|
return hash_u64((long)value);
|
|
return hash_u32((long)value);
|
|
}
|