* doc/c-arm.texi: Add new fpe options to list of supported flags.
[deliverable/binutils-gdb.git] / libiberty / hashtab.c
index 28078027fef18ad75c109b8ba69f7e28328ff3f9..36ad6e4940b6373070375a100005f5d34c983872 100644 (file)
@@ -80,7 +80,7 @@ higher_prime_number (n)
 {
   /* These are primes that are near, but slightly smaller than, a
      power of two.  */
-  static unsigned long primes[] = {
+  static const unsigned long primes[] = {
     (unsigned long) 2,
     (unsigned long) 7,
     (unsigned long) 13,
@@ -115,12 +115,12 @@ higher_prime_number (n)
     ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
   };
 
-  unsigned long* low = &primes[0];
-  unsigned long* high = &primes[sizeof(primes) / sizeof(primes[0])];
+  const unsigned long *low = &primes[0];
+  const unsigned long *high = &primes[sizeof(primes) / sizeof(primes[0])];
 
   while (low != high)
     {
-      unsigned long* mid = low + (high - low) / 2;
+      const unsigned long *mid = low + (high - low) / 2;
       if (n > *mid)
        low = mid + 1;
       else
@@ -562,7 +562,30 @@ htab_collisions (htab)
   return (double) htab->collisions / (double) htab->searches;
 }
 
-/* Hash P as a null-terminated string.  */
+/* Hash P as a null-terminated string.
+
+   Copied from gcc/hashtable.c.  Zack had the following to say with respect
+   to applicability, though note that unlike hashtable.c, this hash table
+   implementation re-hashes rather than chain buckets.
+
+   http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html
+   From: Zack Weinberg <zackw@panix.com>
+   Date: Fri, 17 Aug 2001 02:15:56 -0400
+
+   I got it by extracting all the identifiers from all the source code
+   I had lying around in mid-1999, and testing many recurrences of
+   the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either
+   prime numbers or the appropriate identity.  This was the best one.
+   I don't remember exactly what constituted "best", except I was
+   looking at bucket-length distributions mostly.
+   
+   So it should be very good at hashing identifiers, but might not be
+   as good at arbitrary strings.
+   
+   I'll add that it thoroughly trounces the hash functions recommended
+   for this use at http://burtleburtle.net/bob/hash/index.html, both
+   on speed and bucket distribution.  I haven't tried it against the
+   function they just started using for Perl's hashes.  */
 
 hashval_t
 htab_hash_string (p)
This page took 0.023596 seconds and 4 git commands to generate.