1#include "../include/hash.h"
11 const unsigned char* str = (
const unsigned char*)key;
15 while ((c = *str++) !=
'\0') {
16 hash = ((hash << 5) + hash) + (uint32_t)c;
27 const unsigned char* str = (
const unsigned char*)key;
31 while ((c = *str++) !=
'\0') {
32 hash = ((hash << 5) + hash) ^ (unsigned)c;
43 const unsigned char* str = (
const unsigned char*)key;
44 uint32_t hash = 2166136261u;
47 hash ^= (uint32_t)(*str++);
59 const unsigned char* str = (
const unsigned char*)key;
60 uint64_t hash = 14695981039346656037ULL;
63 hash ^= (uint64_t)(*str++);
64 hash *= 1099511628211ULL;
75 const unsigned char* str = (
const unsigned char*)key;
80 hash = (hash << 4) + (*str++);
81 x = hash & 0xF0000000UL;
96 const unsigned char* str = (
const unsigned char*)key;
100 while ((c = *str++) !=
'\0') {
101 hash = (
unsigned char)c + (hash << 6) + (hash << 16) - hash;
111 const unsigned char* data = (
const unsigned char*)key;
112 uint32_t crc = 0xFFFFFFFF;
116 for (
int k = 0; k < 8; k++) {
117 crc = (crc >> 1) ^ (0xEDB88320 & (-(crc & 1)));
129 const uint8_t* data = (
const uint8_t*)key;
130 const int nblocks = len / 4;
134 const uint32_t c1 = 0xcc9e2d51;
135 const uint32_t c2 = 0x1b873593;
138 const uint32_t* blocks = (
const uint32_t*)(data + nblocks * 4);
140 for (
int i = -nblocks; i; i++) {
141 uint32_t k1 = blocks[i];
144 k1 = (k1 << 15) | (k1 >> (32 - 15));
148 h1 = (h1 << 13) | (h1 >> (32 - 13));
149 h1 = h1 * 5 + 0xe6546b64;
153 const uint8_t* tail = (
const uint8_t*)(data + nblocks * 4);
158 k1 ^= (uint32_t)(tail[2] << 16u);
161 k1 ^= (uint32_t)(tail[1] << 8u);
166 k1 = (k1 << 15) | (k1 >> (32 - 15));
uint32_t solidc_crc32_hash(const void *key, size_t len)
CRC32 hash function for arbitrary binary data.
uint32_t solidc_fnv1a_hash(const void *key)
FNV-1a 32-bit hash function for null-terminated strings.
uint64_t solidc_fnv1a_hash64(const void *key)
FNV-1a 64-bit hash function for null-terminated strings.
uint32_t solidc_elf_hash(const void *key)
ELF hash function for null-terminated strings.
uint32_t solidc_sdbm_hash(const void *key)
SDBM hash function for null-terminated strings.
uint32_t solidc_djb2a_hash(const void *key)
DJB2A hash function (XOR variant) for null-terminated strings.
uint32_t solidc_murmur_hash(const char *key, uint32_t len, uint32_t seed)
MurmurHash3 32-bit hash function.
uint32_t solidc_djb2_hash(const void *key)
DJB2 hash function for null-terminated strings.