summaryrefslogtreecommitdiffstats
path: root/contrib/gperf/lib/hash.cc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gperf/lib/hash.cc')
-rw-r--r--contrib/gperf/lib/hash.cc33
1 files changed, 12 insertions, 21 deletions
diff --git a/contrib/gperf/lib/hash.cc b/contrib/gperf/lib/hash.cc
index 72a287f..b5bb4ad 100644
--- a/contrib/gperf/lib/hash.cc
+++ b/contrib/gperf/lib/hash.cc
@@ -1,36 +1,27 @@
/*
-Copyright (C) 1990 Free Software Foundation
+Copyright (C) 1990, 2000 Free Software Foundation
written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <hash.h>
/*
- some useful hash functions
+ Some useful hash function.
+ It's not a particularly good hash function (<< 5 would be better than << 4),
+ but people believe in it because it comes from Dragon book.
*/
-unsigned int hashpjw (const char* x) // From Dragon book, p436
+unsigned int
+hashpjw (const char *x, unsigned int len) // From Dragon book, p436
{
unsigned int h = 0;
unsigned int g;
- while (*x != 0)
- {
- h = (h << 4) + (unsigned char) *x++;
- if ((g = h & 0xf0000000) != 0)
- h = (h ^ (g >> 24)) ^ g;
- }
+ for (; len > 0; len--)
+ {
+ h = (h << 4) + (unsigned char) *x++;
+ if ((g = h & 0xf0000000) != 0)
+ h = (h ^ (g >> 24)) ^ g;
+ }
return h;
}
OpenPOWER on IntegriCloud