Annotation of embedaddon/lrzsz/intl/hash-string.h, revision 1.1.1.1

1.1       misho       1: /* Implements a string hashing function.
                      2:    Copyright (C) 1995, 1997 Free Software Foundation, Inc.
                      3: 
                      4:    This program is free software; you can redistribute it and/or modify
                      5:    it under the terms of the GNU General Public License as published by
                      6:    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
                     12:    GNU General Public License for more details.
                     13: 
                     14:    You should have received a copy of the GNU Library General Public
                     15:    License along with the GNU C Library; see the file COPYING.LIB.  If not,
                     16:    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
                     17:    Boston, MA 02111-1307, USA.  */
                     18: 
                     19: #ifdef HAVE_VALUES_H
                     20: # include <values.h>
                     21: #endif
                     22: 
                     23: /* @@ end of prolog @@ */
                     24: 
                     25: #ifndef PARAMS
                     26: # if __STDC__
                     27: #  define PARAMS(Args) Args
                     28: # else
                     29: #  define PARAMS(Args) ()
                     30: # endif
                     31: #endif
                     32: 
                     33: /* We assume to have `unsigned long int' value with at least 32 bits.  */
                     34: #define HASHWORDBITS 32
                     35: 
                     36: 
                     37: /* Defines the so called `hashpjw' function by P.J. Weinberger
                     38:    [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
                     39:    1986, 1987 Bell Telephone Laboratories, Inc.]  */
                     40: static unsigned long hash_string PARAMS ((const char *__str_param));
                     41: 
                     42: static inline unsigned long
                     43: hash_string (str_param)
                     44:      const char *str_param;
                     45: {
                     46:   unsigned long int hval, g;
                     47:   const char *str = str_param;
                     48: 
                     49:   /* Compute the hash value for the given string.  */
                     50:   hval = 0;
                     51:   while (*str != '\0')
                     52:     {
                     53:       hval <<= 4;
                     54:       hval += (unsigned long) *str++;
                     55:       g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
                     56:       if (g != 0)
                     57:        {
                     58:          hval ^= g >> (HASHWORDBITS - 8);
                     59:          hval ^= g;
                     60:        }
                     61:     }
                     62:   return hval;
                     63: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>