root/libglibc/hash-string.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __hash_string

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

/* [previous][next][first][last][top][bottom][index][help] */