commit - 8a45b177ce478d466d42d59767c4e73405b616b0
commit + b422b11865a6243c070983e3a80ea226904f0edc
blob - 511dba15274c17edfd335f50562f6b59866208d0
blob + d6cb516a002161a8b616998dd75ad91154b9a025
--- src/ngircd/hash.c
+++ src/ngircd/hash.c
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
- * $Id: hash.c,v 1.1 2002/03/14 15:31:22 alex Exp $
+ * $Id: hash.c,v 1.2 2002/03/14 15:49:36 alex Exp $
*
* hash.c: Hash-Werte berechnen
*/
#include "hash.h"
+LOCAL UINT32 jenkins_hash( register UINT8 *k, register UINT32 length, register UINT32 initval);
+
+
+GLOBAL UINT32 Hash( CHAR *String )
+{
+ /* Hash-Wert ueber String berechnen */
+ return jenkins_hash( String, strlen( String ), 42 );
+} /* Hash */
+
+
/*
* Die hier verwendete Hash-Funktion stammt aus lookup2.c von Bob Jenkins
* (URL: <http://burtleburtle.net/bob/c/lookup2.c>). Aus dem Header:
*/
-typedef unsigned long int ub4;
-typedef unsigned char ub1;
-
-
-#define hashsize(n) ((ub4)1<<(n))
+#define hashsize(n) ((UINT32)1<<(n))
#define hashmask(n) (hashsize(n)-1)
#define mix(a,b,c) \
a -= b; a -= c; a ^= (c>>3); \
b -= c; b -= a; b ^= (a<<10); \
c -= a; c -= b; c ^= (b>>15); \
-}
+} /* mix */
-ub4 hash( register ub1 *k, register ub4 length, register ub4 initval)
+LOCAL UINT32 jenkins_hash( register UINT8 *k, register UINT32 length, register UINT32 initval)
{
/* k: the key
* length: length of the key
* initval: the previous hash, or an arbitrary value
*/
- register ub4 a,b,c,len;
+ register UINT32 a,b,c,len;
/* Set up the internal state */
len = length;
/* handle most of the key */
while (len >= 12)
{
- a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24));
- b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24));
- c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24));
+ a += (k[0] +((UINT32)k[1]<<8) +((UINT32)k[2]<<16) +((UINT32)k[3]<<24));
+ b += (k[4] +((UINT32)k[5]<<8) +((UINT32)k[6]<<16) +((UINT32)k[7]<<24));
+ c += (k[8] +((UINT32)k[9]<<8) +((UINT32)k[10]<<16)+((UINT32)k[11]<<24));
mix(a,b,c);
k += 12; len -= 12;
}
c += length;
switch(len) /* all the case statements fall through */
{
- case 11: c+=((ub4)k[10]<<24);
- case 10: c+=((ub4)k[9]<<16);
- case 9 : c+=((ub4)k[8]<<8);
+ case 11: c+=((UINT32)k[10]<<24);
+ case 10: c+=((UINT32)k[9]<<16);
+ case 9 : c+=((UINT32)k[8]<<8);
/* the first byte of c is reserved for the length */
- case 8 : b+=((ub4)k[7]<<24);
- case 7 : b+=((ub4)k[6]<<16);
- case 6 : b+=((ub4)k[5]<<8);
+ case 8 : b+=((UINT32)k[7]<<24);
+ case 7 : b+=((UINT32)k[6]<<16);
+ case 6 : b+=((UINT32)k[5]<<8);
case 5 : b+=k[4];
- case 4 : a+=((ub4)k[3]<<24);
- case 3 : a+=((ub4)k[2]<<16);
- case 2 : a+=((ub4)k[1]<<8);
+ case 4 : a+=((UINT32)k[3]<<24);
+ case 3 : a+=((UINT32)k[2]<<16);
+ case 2 : a+=((UINT32)k[1]<<8);
case 1 : a+=k[0];
/* case 0: nothing left to add */
}
/* report the result */
return c;
-} /* hash */
+} /* jenkins_hash */
/* -eof- */
blob - 80caed892800cb869149c01e58e34ffce7d728b1
blob + aacce61d0402d3f46757a33ee17a65e0c98b42db
--- src/ngircd/hash.h
+++ src/ngircd/hash.h
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
*
- * $Id: hash.h,v 1.1 2002/03/14 15:31:22 alex Exp $
+ * $Id: hash.h,v 1.2 2002/03/14 15:49:36 alex Exp $
*
* hash.h: Hash-Werte berechnen (Header)
*/
#define __hash_h__
+GLOBAL UINT32 Hash( CHAR *String );
+
+
#endif