home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / hash.C < prev    next >
C/C++ Source or Header  |  1996-09-02  |  2KB  |  61 lines

  1. // $Id: hash.C,v 1.3 1996/09/02 19:31:14 zeller Exp $ -*- C++ -*-
  2. // Hash functions
  3.  
  4. /* 
  5. Copyright (C) 1990 Free Software Foundation
  6.     written by Doug Lea (dl@rocky.oswego.edu)
  7.  
  8. This file is part of the GNU C++ Library.  This library is free
  9. software; you can redistribute it and/or modify it under the terms of
  10. the GNU Library General Public License as published by the Free
  11. Software Foundation; either version 2 of the License, or (at your
  12. option) any later version.  This library is distributed in the hope
  13. that it will be useful, but WITHOUT ANY WARRANTY; without even the
  14. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  15. PURPOSE.  See the GNU Library General Public License for more details.
  16. You should have received a copy of the GNU Library General Public
  17. License along with this library; if not, write to the Free Software
  18. Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19. */
  20.  
  21. char hash_rcsid[] = 
  22.     "$Id: hash.C,v 1.3 1996/09/02 19:31:14 zeller Exp $";
  23.  
  24. #ifdef __GNUG__
  25. #pragma implementation
  26. #endif
  27.  
  28. #include "hash.h"
  29.  
  30. /*
  31.  some useful hash functions
  32. */
  33.  
  34. unsigned int hashpjw(const char* x) // From Dragon book, p436
  35. {
  36.     unsigned int h = 0;
  37.     unsigned int g;
  38.  
  39.     while (*x != '\0')
  40.     {
  41.     h = (h << 4) + *x++;
  42.     if ((g = h & 0xf0000000) != 0)
  43.         h = (h ^ (g >> 24)) ^ g;
  44.     }
  45.     return h;
  46. }
  47.  
  48. unsigned int foldhash(double x)
  49. {
  50.     union 
  51.     { 
  52.     unsigned int i[2]; 
  53.     double d; 
  54.     } u;
  55.  
  56.     u.d = x;
  57.     unsigned int u0 = u.i[0];
  58.     unsigned int u1 = u.i[1]; 
  59.     return u0 ^ u1;
  60. }
  61.