refactor
[pspp] / src / libpspp / hash-functions.c
index 96ff282c85d7fc9684672cd840a5ea1cca33afe8..ff9ea895cacd66b91e012e26b9add4f5e09f2608 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2008, 2009, 2010, 2011, 2012, 2019 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
 
 #include "libpspp/hash-functions.h"
 
-#include <assert.h>
+#if 0
+/* Enable this code only for testing!   Theoretically everything
+   should still work, but very inefficient hash tables will result,
+   meaning that the code will be slow.  */
+#warning "HASHING FUNCTIONS ARE DISABLED!  EXPECT LOTS OF HASH COLLISIONS!!!"
+
+#include "libpspp/compiler.h"
+
+
+unsigned int
+hash_bytes (const void *b UNUSED, size_t s UNUSED, unsigned int basis UNUSED)
+{
+  return 0;
+}
+
+unsigned int
+hash_string (const char *s UNUSED, unsigned int basis UNUSED)
+{
+  return 0;
+}
+
+unsigned int
+hash_int (int i UNUSED, unsigned int basis UNUSED)
+{
+  return 0;
+}
+
+unsigned int
+hash_double (double d UNUSED, unsigned int basis UNUSED)
+{
+  return 0;
+}
+
+unsigned int
+hash_pointer (const void *p UNUSED, unsigned int basis UNUSED)
+{
+  return 0;
+}
+
+#else
+
 #include <ctype.h>
 #include <math.h>
 #include <stdint.h>
@@ -102,45 +142,6 @@ hash_string (const char *s, unsigned int basis)
   return hash_bytes (s, strlen (s), basis);
 }
 
-/* Returns a hash value for null-terminated string S, with
-   lowercase and uppercase letters treated as equal, starting
-   from BASIS. */
-unsigned int
-hash_case_string (const char *s, unsigned int basis)
-{
-  size_t n = strlen (s);
-  uint32_t a, b, c;
-  uint32_t tmp[3];
-  int i;
-
-  a = b = c = 0xdeadbeef + n + basis;
-
-  while (n >= 12)
-    {
-      for (i = 0; i < 12; i++)
-        ((unsigned char *)tmp)[i] = toupper ((unsigned char) s[i]);
-      a += tmp[0];
-      b += tmp[1];
-      c += tmp[2];
-      HASH_MIX (a, b, c);
-      n -= 12;
-      s += 12;
-    }
-
-  if (n > 0)
-    {
-      memset (tmp, 0, 12);
-      for (i = 0; i < n; i++)
-        ((unsigned char *)tmp)[i] = toupper ((unsigned char) s[i]);
-      a += tmp[0];
-      b += tmp[1];
-      c += tmp[2];
-    }
-
-  HASH_FINAL (a, b, c);
-  return c;
-}
-
 /* Returns a hash value for integer X, starting from BASIS. */
 unsigned int
 hash_int (int x, unsigned int basis)
@@ -164,7 +165,7 @@ hash_double (double d, unsigned int basis)
       uint32_t tmp[2];
       uint32_t a, b, c;
 
-      a = b = c = 0xdeadbeef + 8 + basis;
+      a = b = c = 0xdeadbeefU + 8 + basis;
 
       memcpy (tmp, &d, 8);
       a += tmp[0];
@@ -184,3 +185,5 @@ hash_pointer (const void *p, unsigned int basis)
      on 64-bit platforms. */
   return hash_int ((int) (uintptr_t) p, basis);
 }
+
+#endif