1/* Implements a string hashing function.
2   Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4
5   The GNU C Library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License as published by the Free Software Foundation; either
8   version 2.1 of the License, or (at your option) any later version.
9
10   The GNU C Library is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   Lesser General Public License for more details.
14
15   You should have received a copy of the GNU Lesser General Public
16   License along with the GNU C Library; if not, write to the Free
17   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18   02111-1307 USA.  */
19
20/* @@ end of prolog @@ */
21
22#ifndef PARAMS
23# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
24#  define PARAMS(Args) Args
25# else
26#  define PARAMS(Args) ()
27# endif
28#endif
29
30/* We assume to have `unsigned long int' value with at least 32 bits.  */
31#define HASHWORDBITS 32
32
33
34/* Defines the so called `hashpjw' function by P.J. Weinberger
35   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
36   1986, 1987 Bell Telephone Laboratories, Inc.]  */
37static unsigned long int hash_string PARAMS ((const char *__str_param));
38
39static inline unsigned long int
40hash_string (str_param)
41     const char *str_param;
42{
43  unsigned long int hval, g;
44  const char *str = str_param;
45
46  /* Compute the hash value for the given string.  */
47  hval = 0;
48  while (*str != '\0')
49    {
50      hval <<= 4;
51      hval += (unsigned long int) *str++;
52      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
53      if (g != 0)
54	{
55	  hval ^= g >> (HASHWORDBITS - 8);
56	  hval ^= g;
57	}
58    }
59  return hval;
60}
61