X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fhash.c;h=eb43b54e7fedf24d7db0dd569cc34d885bb91dd4;hb=89306c3c6b335e23a09bc2c3442d8b08e60cb328;hp=9f1079a29a4673ccc2a3fb858360d7e7a246336f;hpb=9f087e7aa4cdff1d5d46d5e188c0017a9d2d0029;p=pspp-builds.git diff --git a/src/libpspp/hash.c b/src/libpspp/hash.c index 9f1079a2..eb43b54e 100644 --- a/src/libpspp/hash.c +++ b/src/libpspp/hash.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,7 +19,6 @@ #include "hash.h" #include "message.h" #include -#include #include #include #include @@ -70,74 +69,6 @@ next_power_of_2 (size_t x) } } -/* Fowler-Noll-Vo hash constants, for 32-bit word sizes. */ -#define FNV_32_PRIME 16777619u -#define FNV_32_BASIS 2166136261u - -/* Fowler-Noll-Vo 32-bit hash, for bytes. */ -unsigned -hsh_hash_bytes (const void *buf_, size_t size) -{ - const unsigned char *buf = (const unsigned char *) buf_; - unsigned hash; - - assert (buf != NULL); - - hash = FNV_32_BASIS; - while (size-- > 0) - hash = (hash * FNV_32_PRIME) ^ *buf++; - - return hash; -} - -/* Fowler-Noll-Vo 32-bit hash, for strings. */ -unsigned -hsh_hash_string (const char *s_) -{ - const unsigned char *s = (const unsigned char *) s_; - unsigned hash; - - assert (s != NULL); - - hash = FNV_32_BASIS; - while (*s != '\0') - hash = (hash * FNV_32_PRIME) ^ *s++; - - return hash; -} - -/* Fowler-Noll-Vo 32-bit hash, for case-insensitive strings. */ -unsigned -hsh_hash_case_string (const char *s_) -{ - const unsigned char *s = (const unsigned char *) s_; - unsigned hash; - - assert (s != NULL); - - hash = FNV_32_BASIS; - while (*s != '\0') - hash = (hash * FNV_32_PRIME) ^ toupper (*s++); - - return hash; -} - -/* Hash for ints. */ -unsigned -hsh_hash_int (int i) -{ - return hsh_hash_bytes (&i, sizeof i); -} - -/* Hash for double. */ -unsigned -hsh_hash_double (double d) -{ - if (!isnan (d)) - return hsh_hash_bytes (&d, sizeof d); - else - return 0; -} /* Hash tables. */ @@ -449,7 +380,7 @@ hsh_sort_copy (struct hsh_table *h) to a pointer to that entry; otherwise returns a pointer to a NULL entry which *must* be used to insert a new entry having the same key data. */ -inline void ** +void ** hsh_probe (struct hsh_table *h, const void *target) { unsigned i;