mirror of
https://github.com/EnergyMech/energymech.git
synced 2025-12-29 16:14:43 +00:00
31 lines
569 B
C
31 lines
569 B
C
|
|
int mkhash(const char *cmd)
|
||
|
|
{
|
||
|
|
const char *s;
|
||
|
|
int h,t,ki,kk;
|
||
|
|
uint8_t a,b;
|
||
|
|
|
||
|
|
s = cmd;
|
||
|
|
ki = 15 * strlen(cmd);
|
||
|
|
kk = hashdata[ki & HASHDATAMASK];
|
||
|
|
while(*s)
|
||
|
|
{
|
||
|
|
a = tolowertab[(uchar)s[0]];
|
||
|
|
b = tolowertab[(uchar)s[1]];
|
||
|
|
h = (a - b) & HASHDATAMASK;
|
||
|
|
ki += a + hashdata[h];
|
||
|
|
#ifdef HEATMAP
|
||
|
|
heatmap[ki & HASHDATAMASK] += 1;
|
||
|
|
//heatmap[(ki + h) & HASHDATAMASK] += 1;
|
||
|
|
#endif
|
||
|
|
kk ^= hashdata[ki & HASHDATAMASK] ^ (hashdata[(h + ki) & HASHDATAMASK] << 8);
|
||
|
|
s++;
|
||
|
|
}
|
||
|
|
t = kk & 511;
|
||
|
|
#ifndef COM_ONS_C
|
||
|
|
if (hash[t] > 0)
|
||
|
|
collis += 1;
|
||
|
|
hash[t] += 1;
|
||
|
|
#endif
|
||
|
|
return(t);
|
||
|
|
}
|