X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fhash.c;h=f2d99e3a8f31204d9a93d48cc1208695bff78713;hb=9978bc7700f2b222626586f6abe9c498e870dbcf;hp=9da3deb120a92ba0ee3423f78441ad85dd9ab22f;hpb=f404544337964f80bb2d1fee5acb147f7023bc08;p=pspp diff --git a/src/libpspp/hash.c b/src/libpspp/hash.c index 9da3deb120..f2d99e3a8f 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 @@ -15,19 +15,18 @@ along with this program. If not, see . */ #include -#include -#include "hash.h" -#include "message.h" + #include -#include #include #include #include + #include "array.h" #include "compiler.h" +#include "hash.h" #include "misc.h" -#include "str.h" #include "pool.h" +#include "str.h" #include "xalloc.h" @@ -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. */ @@ -611,7 +542,7 @@ hsh_dump (struct hsh_table *h) void **entry = h->entries; int i; - printf (_("hash table:")); + printf ("hash table:"); for (i = 0; i < h->size; i++) printf (" %p", *entry++); printf ("\n");