home *** CD-ROM | disk | FTP | other *** search
/ Graphics 16,000 / graphics-16000.iso / msdos / utils / graphtal.lzh / Graphtal.Amiga / Hash.C < prev    next >
C/C++ Source or Header  |  1992-11-17  |  984b  |  44 lines

  1. /*
  2.  * Hash.C - character based hashing functions.
  3.  *
  4.  * Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
  5.  *                     University of Berne, Switzerland
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified, and redistributed
  9.  * provided that this copyright notice is preserved on all copies.
  10.  *
  11.  * You may not distribute this software, in whole or in part, as part of
  12.  * any commercial product without the express consent of the authors.
  13.  *
  14.  * There is no warranty or other guarantee of fitness of this software
  15.  * for any purpose.  It is provided solely "as is".
  16.  *
  17.  */
  18.  
  19. #include "Hash.h"
  20.  
  21. // string hashing by P.J. Weinberger
  22. unsigned int hash(const char* s)
  23. {
  24.   unsigned int h=0;
  25.   unsigned int g;
  26.  
  27.   for (register int i=0; s[i] != '\0'; i++) {
  28.     h = (h<<4) + s[i];
  29.     if (g = h & 0xf0000000)
  30.     {
  31.       h = h^(g>>24);
  32.       h = h^g;
  33.     }
  34.   }
  35.   return h;
  36. }
  37.  
  38. unsigned int hash(const char* s, long arg)
  39. {
  40.   return ((hash(s)<<5)+arg);
  41. }
  42.  
  43.  
  44.