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