openldap/build/unproto/hash.c
1998-08-09 00:43:13 +00:00

55 lines
1.3 KiB
C

/*++
/* NAME
/* hash 3
/* SUMMARY
/* compute hash value for string
/* SYNOPSIS
/* int hash(string, size)
/* char *string;
/* int size;
/* DESCRIPTION
/* This function computes for the given null-terminated string an
/* integer hash value in the range 0..size-1.
/* SEE ALSO
/* .fi
/* Alfred V. Aho, Ravi Sethi and Jeffrey D. Ullman: Compilers:
/* principles, techniques and tools; Addison-Wesley, Amsterdam, 1986.
/* AUTHOR(S)
/* Wietse Venema
/* Eindhoven University of Technology
/* Department of Mathematics and Computer Science
/* Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
/*
/* Originally written by: P. J. Weinberger at Bell Labs.
/* LAST MODIFICATION
/* 92/01/15 21:53:12
/* VERSION/RELEASE
/* %I
/*--*/
static char hash_sccsid[] = "@(#) hash.c 1.1 92/01/15 21:53:12";
/* hash - hash a string; original author: P. J. Weinberger at Bell Labs. */
int hash(s, size)
register char *s;
unsigned size;
{
register unsigned long h = 0;
register unsigned long g;
/*
* For a performance comparison with the hash function presented in K&R,
* first edition, see the "Dragon" book by Aho, Sethi and Ullman.
*/
while (*s) {
h = (h << 4) + *s++;
if (g = (h & 0xf0000000)) {
h ^= (g >> 24);
h ^= g;
}
}
return (h % size);
}