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