Merge branch 'master' into netgen-1.5
This commit is contained in:
commit
f02802dd21
31
base/hash.c
31
base/hash.c
|
|
@ -137,32 +137,37 @@ static unsigned char uppercase[] = {
|
||||||
// horrible things can happen, as, for example, names AOI12 and OAI12
|
// horrible things can happen, as, for example, names AOI12 and OAI12
|
||||||
// have exactly the same hash result. Lousy for binning and even
|
// have exactly the same hash result. Lousy for binning and even
|
||||||
// lousier for generating class magic numbers.
|
// lousier for generating class magic numbers.
|
||||||
|
//
|
||||||
|
// Updated again 4/2/2026 to the FNV-1a hash, which is better than
|
||||||
|
// SDBM for this application, according to ChatGPT.
|
||||||
|
|
||||||
unsigned long hashnocase(char *s, int hashsize)
|
unsigned long hashnocase(char *s, int hashsize)
|
||||||
{
|
{
|
||||||
unsigned long hashval;
|
unsigned long hashval = 2166136261ul;
|
||||||
|
for (; *s != '\0'; s++) {
|
||||||
for (hashval = 0; *s != '\0'; )
|
hashval ^= uppercase[*s];
|
||||||
hashval = uppercase[*s++]
|
hashval *= 16777619ul;
|
||||||
+ (hashval << 6) + (hashval << 16) - hashval;
|
}
|
||||||
return (hashsize == 0) ? hashval : (hashval % hashsize);
|
return (hashsize == 0) ? hashval : (hashval % hashsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long hashcase(char *s, int hashsize)
|
unsigned long hashcase(char *s, int hashsize)
|
||||||
{
|
{
|
||||||
unsigned long hashval;
|
unsigned long hashval = 2166136261ul;
|
||||||
|
for (; *s != '\0'; s++) {
|
||||||
for (hashval = 0; *s != '\0'; )
|
hashval ^= (unsigned char)(*s);
|
||||||
hashval = (*s++) + (hashval << 6) + (hashval << 16) - hashval;
|
hashval *= 16777619ul;
|
||||||
|
}
|
||||||
return (hashsize == 0) ? hashval : (hashval % hashsize);
|
return (hashsize == 0) ? hashval : (hashval % hashsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long genhash(char *s, int c, int hashsize)
|
unsigned long genhash(char *s, int c, int hashsize)
|
||||||
{
|
{
|
||||||
unsigned long hashval;
|
unsigned long hashval = 2166136261ul;
|
||||||
|
for (; *s != '\0'; s++) {
|
||||||
for (hashval = (unsigned long)c; *s != '\0'; )
|
hashval ^= (unsigned long)c;
|
||||||
hashval = (*s++) + (hashval << 6) + (hashval << 16) - hashval;
|
hashval *= 16777619ul;
|
||||||
|
}
|
||||||
return (hashsize == 0) ? hashval : (hashval % hashsize);
|
return (hashsize == 0) ? hashval : (hashval % hashsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue