home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / share / gettext / intl / hash-string.c < prev    next >
Encoding:
C/C++ Source or Header  |  2007-03-05  |  1.6 KB  |  52 lines

  1. /* Implements a string hashing function.
  2.    Copyright (C) 1995, 1997, 1998, 2000, 2003 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., 51 Franklin Street, Fifth Floor,
  18.    Boston, MA 02110-1301, USA.  */
  19.  
  20. #ifdef HAVE_CONFIG_H
  21. # include <config.h>
  22. #endif
  23.  
  24. /* Specification.  */
  25. #include "hash-string.h"
  26.  
  27.  
  28. /* Defines the so called `hashpjw' function by P.J. Weinberger
  29.    [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
  30.    1986, 1987 Bell Telephone Laboratories, Inc.]  */
  31. unsigned long int
  32. __hash_string (const char *str_param)
  33. {
  34.   unsigned long int hval, g;
  35.   const char *str = str_param;
  36.  
  37.   /* Compute the hash value for the given string.  */
  38.   hval = 0;
  39.   while (*str != '\0')
  40.     {
  41.       hval <<= 4;
  42.       hval += (unsigned char) *str++;
  43.       g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
  44.       if (g != 0)
  45.     {
  46.       hval ^= g >> (HASHWORDBITS - 8);
  47.       hval ^= g;
  48.     }
  49.     }
  50.   return hval;
  51. }
  52.