Files
qrtr/src/hash.c
2016-02-07 21:45:03 -08:00

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);
}