Home | History | Annotate | Line # | Download | only in libiberty
      1       1.1  mrg /* An expandable hash tables datatype.
      2  1.1.1.11  mrg    Copyright (C) 1999-2024 Free Software Foundation, Inc.
      3       1.1  mrg    Contributed by Vladimir Makarov (vmakarov (at) cygnus.com).
      4       1.1  mrg 
      5       1.1  mrg This file is part of the libiberty library.
      6       1.1  mrg Libiberty is free software; you can redistribute it and/or
      7       1.1  mrg modify it under the terms of the GNU Library General Public
      8       1.1  mrg License as published by the Free Software Foundation; either
      9       1.1  mrg version 2 of the License, or (at your option) any later version.
     10       1.1  mrg 
     11       1.1  mrg Libiberty is distributed in the hope that it will be useful,
     12       1.1  mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
     13       1.1  mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14       1.1  mrg Library General Public License for more details.
     15       1.1  mrg 
     16       1.1  mrg You should have received a copy of the GNU Library General Public
     17       1.1  mrg License along with libiberty; see the file COPYING.LIB.  If
     18       1.1  mrg not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
     19       1.1  mrg Boston, MA 02110-1301, USA.  */
     20       1.1  mrg 
     21       1.1  mrg /* This package implements basic hash table functionality.  It is possible
     22       1.1  mrg    to search for an entry, create an entry and destroy an entry.
     23       1.1  mrg 
     24       1.1  mrg    Elements in the table are generic pointers.
     25       1.1  mrg 
     26       1.1  mrg    The size of the table is not fixed; if the occupancy of the table
     27       1.1  mrg    grows too high the hash table will be expanded.
     28       1.1  mrg 
     29       1.1  mrg    The abstract data implementation is based on generalized Algorithm D
     30       1.1  mrg    from Knuth's book "The art of computer programming".  Hash table is
     31       1.1  mrg    expanded by creation of new hash table and transferring elements from
     32       1.1  mrg    the old table to the new table. */
     33       1.1  mrg 
     34       1.1  mrg #ifdef HAVE_CONFIG_H
     35       1.1  mrg #include "config.h"
     36       1.1  mrg #endif
     37       1.1  mrg 
     38       1.1  mrg #include <sys/types.h>
     39       1.1  mrg 
     40       1.1  mrg #ifdef HAVE_STDLIB_H
     41       1.1  mrg #include <stdlib.h>
     42       1.1  mrg #endif
     43       1.1  mrg #ifdef HAVE_STRING_H
     44       1.1  mrg #include <string.h>
     45       1.1  mrg #endif
     46       1.1  mrg #ifdef HAVE_MALLOC_H
     47       1.1  mrg #include <malloc.h>
     48       1.1  mrg #endif
     49       1.1  mrg #ifdef HAVE_LIMITS_H
     50       1.1  mrg #include <limits.h>
     51       1.1  mrg #endif
     52       1.1  mrg #ifdef HAVE_INTTYPES_H
     53       1.1  mrg #include <inttypes.h>
     54       1.1  mrg #endif
     55       1.1  mrg #ifdef HAVE_STDINT_H
     56       1.1  mrg #include <stdint.h>
     57       1.1  mrg #endif
     58       1.1  mrg 
     59       1.1  mrg #include <stdio.h>
     60       1.1  mrg 
     61       1.1  mrg #include "libiberty.h"
     62       1.1  mrg #include "ansidecl.h"
     63       1.1  mrg #include "hashtab.h"
     64       1.1  mrg 
     65       1.1  mrg #ifndef CHAR_BIT
     66       1.1  mrg #define CHAR_BIT 8
     67       1.1  mrg #endif
     68       1.1  mrg 
     69       1.1  mrg static unsigned int higher_prime_index (unsigned long);
     70       1.1  mrg static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int);
     71       1.1  mrg static hashval_t htab_mod (hashval_t, htab_t);
     72       1.1  mrg static hashval_t htab_mod_m2 (hashval_t, htab_t);
     73       1.1  mrg static hashval_t hash_pointer (const void *);
     74       1.1  mrg static int eq_pointer (const void *, const void *);
     75       1.1  mrg static int htab_expand (htab_t);
     76  1.1.1.11  mrg static void **find_empty_slot_for_expand (htab_t, hashval_t);
     77       1.1  mrg 
     78       1.1  mrg /* At some point, we could make these be NULL, and modify the
     79       1.1  mrg    hash-table routines to handle NULL specially; that would avoid
     80       1.1  mrg    function-call overhead for the common case of hashing pointers.  */
     81       1.1  mrg htab_hash htab_hash_pointer = hash_pointer;
     82       1.1  mrg htab_eq htab_eq_pointer = eq_pointer;
     83       1.1  mrg 
     84       1.1  mrg /* Table of primes and multiplicative inverses.
     85       1.1  mrg 
     86       1.1  mrg    Note that these are not minimally reduced inverses.  Unlike when generating
     87       1.1  mrg    code to divide by a constant, we want to be able to use the same algorithm
     88       1.1  mrg    all the time.  All of these inverses (are implied to) have bit 32 set.
     89       1.1  mrg 
     90       1.1  mrg    For the record, here's the function that computed the table; it's a
     91       1.1  mrg    vastly simplified version of the function of the same name from gcc.  */
     92       1.1  mrg 
     93       1.1  mrg #if 0
     94       1.1  mrg unsigned int
     95       1.1  mrg ceil_log2 (unsigned int x)
     96       1.1  mrg {
     97       1.1  mrg   int i;
     98       1.1  mrg   for (i = 31; i >= 0 ; --i)
     99       1.1  mrg     if (x > (1u << i))
    100       1.1  mrg       return i+1;
    101       1.1  mrg   abort ();
    102       1.1  mrg }
    103       1.1  mrg 
    104       1.1  mrg unsigned int
    105       1.1  mrg choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp)
    106       1.1  mrg {
    107       1.1  mrg   unsigned long long mhigh;
    108       1.1  mrg   double nx;
    109       1.1  mrg   int lgup, post_shift;
    110       1.1  mrg   int pow, pow2;
    111       1.1  mrg   int n = 32, precision = 32;
    112       1.1  mrg 
    113       1.1  mrg   lgup = ceil_log2 (d);
    114       1.1  mrg   pow = n + lgup;
    115       1.1  mrg   pow2 = n + lgup - precision;
    116       1.1  mrg 
    117       1.1  mrg   nx = ldexp (1.0, pow) + ldexp (1.0, pow2);
    118       1.1  mrg   mhigh = nx / d;
    119       1.1  mrg 
    120       1.1  mrg   *shiftp = lgup - 1;
    121       1.1  mrg   *mlp = mhigh;
    122       1.1  mrg   return mhigh >> 32;
    123       1.1  mrg }
    124       1.1  mrg #endif
    125       1.1  mrg 
    126       1.1  mrg struct prime_ent
    127       1.1  mrg {
    128       1.1  mrg   hashval_t prime;
    129       1.1  mrg   hashval_t inv;
    130       1.1  mrg   hashval_t inv_m2;	/* inverse of prime-2 */
    131       1.1  mrg   hashval_t shift;
    132       1.1  mrg };
    133       1.1  mrg 
    134       1.1  mrg static struct prime_ent const prime_tab[] = {
    135       1.1  mrg   {          7, 0x24924925, 0x9999999b, 2 },
    136       1.1  mrg   {         13, 0x3b13b13c, 0x745d1747, 3 },
    137       1.1  mrg   {         31, 0x08421085, 0x1a7b9612, 4 },
    138       1.1  mrg   {         61, 0x0c9714fc, 0x15b1e5f8, 5 },
    139       1.1  mrg   {        127, 0x02040811, 0x0624dd30, 6 },
    140       1.1  mrg   {        251, 0x05197f7e, 0x073260a5, 7 },
    141       1.1  mrg   {        509, 0x01824366, 0x02864fc8, 8 },
    142       1.1  mrg   {       1021, 0x00c0906d, 0x014191f7, 9 },
    143       1.1  mrg   {       2039, 0x0121456f, 0x0161e69e, 10 },
    144       1.1  mrg   {       4093, 0x00300902, 0x00501908, 11 },
    145       1.1  mrg   {       8191, 0x00080041, 0x00180241, 12 },
    146       1.1  mrg   {      16381, 0x000c0091, 0x00140191, 13 },
    147       1.1  mrg   {      32749, 0x002605a5, 0x002a06e6, 14 },
    148       1.1  mrg   {      65521, 0x000f00e2, 0x00110122, 15 },
    149       1.1  mrg   {     131071, 0x00008001, 0x00018003, 16 },
    150       1.1  mrg   {     262139, 0x00014002, 0x0001c004, 17 },
    151       1.1  mrg   {     524287, 0x00002001, 0x00006001, 18 },
    152       1.1  mrg   {    1048573, 0x00003001, 0x00005001, 19 },
    153       1.1  mrg   {    2097143, 0x00004801, 0x00005801, 20 },
    154       1.1  mrg   {    4194301, 0x00000c01, 0x00001401, 21 },
    155       1.1  mrg   {    8388593, 0x00001e01, 0x00002201, 22 },
    156       1.1  mrg   {   16777213, 0x00000301, 0x00000501, 23 },
    157       1.1  mrg   {   33554393, 0x00001381, 0x00001481, 24 },
    158       1.1  mrg   {   67108859, 0x00000141, 0x000001c1, 25 },
    159       1.1  mrg   {  134217689, 0x000004e1, 0x00000521, 26 },
    160       1.1  mrg   {  268435399, 0x00000391, 0x000003b1, 27 },
    161       1.1  mrg   {  536870909, 0x00000019, 0x00000029, 28 },
    162       1.1  mrg   { 1073741789, 0x0000008d, 0x00000095, 29 },
    163       1.1  mrg   { 2147483647, 0x00000003, 0x00000007, 30 },
    164       1.1  mrg   /* Avoid "decimal constant so large it is unsigned" for 4294967291.  */
    165       1.1  mrg   { 0xfffffffb, 0x00000006, 0x00000008, 31 }
    166       1.1  mrg };
    167       1.1  mrg 
    168       1.1  mrg /* The following function returns an index into the above table of the
    169       1.1  mrg    nearest prime number which is greater than N, and near a power of two. */
    170       1.1  mrg 
    171       1.1  mrg static unsigned int
    172       1.1  mrg higher_prime_index (unsigned long n)
    173       1.1  mrg {
    174       1.1  mrg   unsigned int low = 0;
    175       1.1  mrg   unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]);
    176       1.1  mrg 
    177       1.1  mrg   while (low != high)
    178       1.1  mrg     {
    179       1.1  mrg       unsigned int mid = low + (high - low) / 2;
    180       1.1  mrg       if (n > prime_tab[mid].prime)
    181       1.1  mrg 	low = mid + 1;
    182       1.1  mrg       else
    183       1.1  mrg 	high = mid;
    184       1.1  mrg     }
    185       1.1  mrg 
    186       1.1  mrg   /* If we've run out of primes, abort.  */
    187       1.1  mrg   if (n > prime_tab[low].prime)
    188       1.1  mrg     {
    189       1.1  mrg       fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
    190       1.1  mrg       abort ();
    191       1.1  mrg     }
    192       1.1  mrg 
    193       1.1  mrg   return low;
    194       1.1  mrg }
    195       1.1  mrg 
    196       1.1  mrg /* Returns non-zero if P1 and P2 are equal.  */
    197       1.1  mrg 
    198       1.1  mrg static int
    199  1.1.1.11  mrg eq_pointer (const void *p1, const void *p2)
    200       1.1  mrg {
    201       1.1  mrg   return p1 == p2;
    202       1.1  mrg }
    203       1.1  mrg 
    204       1.1  mrg 
    205       1.1  mrg /* The parens around the function names in the next two definitions
    206       1.1  mrg    are essential in order to prevent macro expansions of the name.
    207       1.1  mrg    The bodies, however, are expanded as expected, so they are not
    208       1.1  mrg    recursive definitions.  */
    209       1.1  mrg 
    210       1.1  mrg /* Return the current size of given hash table.  */
    211       1.1  mrg 
    212       1.1  mrg #define htab_size(htab)  ((htab)->size)
    213       1.1  mrg 
    214       1.1  mrg size_t
    215       1.1  mrg (htab_size) (htab_t htab)
    216       1.1  mrg {
    217       1.1  mrg   return htab_size (htab);
    218       1.1  mrg }
    219       1.1  mrg 
    220       1.1  mrg /* Return the current number of elements in given hash table. */
    221       1.1  mrg 
    222       1.1  mrg #define htab_elements(htab)  ((htab)->n_elements - (htab)->n_deleted)
    223       1.1  mrg 
    224       1.1  mrg size_t
    225       1.1  mrg (htab_elements) (htab_t htab)
    226       1.1  mrg {
    227       1.1  mrg   return htab_elements (htab);
    228       1.1  mrg }
    229       1.1  mrg 
    230       1.1  mrg /* Return X % Y.  */
    231       1.1  mrg 
    232       1.1  mrg static inline hashval_t
    233       1.1  mrg htab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift)
    234       1.1  mrg {
    235       1.1  mrg   /* The multiplicative inverses computed above are for 32-bit types, and
    236       1.1  mrg      requires that we be able to compute a highpart multiply.  */
    237       1.1  mrg #ifdef UNSIGNED_64BIT_TYPE
    238       1.1  mrg   __extension__ typedef UNSIGNED_64BIT_TYPE ull;
    239       1.1  mrg   if (sizeof (hashval_t) * CHAR_BIT <= 32)
    240       1.1  mrg     {
    241       1.1  mrg       hashval_t t1, t2, t3, t4, q, r;
    242       1.1  mrg 
    243       1.1  mrg       t1 = ((ull)x * inv) >> 32;
    244       1.1  mrg       t2 = x - t1;
    245       1.1  mrg       t3 = t2 >> 1;
    246       1.1  mrg       t4 = t1 + t3;
    247       1.1  mrg       q  = t4 >> shift;
    248       1.1  mrg       r  = x - (q * y);
    249       1.1  mrg 
    250       1.1  mrg       return r;
    251       1.1  mrg     }
    252       1.1  mrg #endif
    253       1.1  mrg 
    254       1.1  mrg   /* Otherwise just use the native division routines.  */
    255       1.1  mrg   return x % y;
    256       1.1  mrg }
    257       1.1  mrg 
    258       1.1  mrg /* Compute the primary hash for HASH given HTAB's current size.  */
    259       1.1  mrg 
    260       1.1  mrg static inline hashval_t
    261       1.1  mrg htab_mod (hashval_t hash, htab_t htab)
    262       1.1  mrg {
    263       1.1  mrg   const struct prime_ent *p = &prime_tab[htab->size_prime_index];
    264       1.1  mrg   return htab_mod_1 (hash, p->prime, p->inv, p->shift);
    265       1.1  mrg }
    266       1.1  mrg 
    267       1.1  mrg /* Compute the secondary hash for HASH given HTAB's current size.  */
    268       1.1  mrg 
    269       1.1  mrg static inline hashval_t
    270       1.1  mrg htab_mod_m2 (hashval_t hash, htab_t htab)
    271       1.1  mrg {
    272       1.1  mrg   const struct prime_ent *p = &prime_tab[htab->size_prime_index];
    273       1.1  mrg   return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift);
    274       1.1  mrg }
    275       1.1  mrg 
    276       1.1  mrg /* This function creates table with length slightly longer than given
    277       1.1  mrg    source length.  Created hash table is initiated as empty (all the
    278       1.1  mrg    hash table entries are HTAB_EMPTY_ENTRY).  The function returns the
    279       1.1  mrg    created hash table, or NULL if memory allocation fails.  */
    280       1.1  mrg 
    281       1.1  mrg htab_t
    282       1.1  mrg htab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,
    283       1.1  mrg                    htab_del del_f, htab_alloc alloc_f, htab_free free_f)
    284       1.1  mrg {
    285   1.1.1.2  mrg   return htab_create_typed_alloc (size, hash_f, eq_f, del_f, alloc_f, alloc_f,
    286   1.1.1.2  mrg 				  free_f);
    287   1.1.1.2  mrg }
    288   1.1.1.2  mrg 
    289   1.1.1.2  mrg /* As above, but uses the variants of ALLOC_F and FREE_F which accept
    290   1.1.1.2  mrg    an extra argument.  */
    291   1.1.1.2  mrg 
    292   1.1.1.2  mrg htab_t
    293   1.1.1.2  mrg htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f,
    294   1.1.1.2  mrg 		      htab_del del_f, void *alloc_arg,
    295   1.1.1.2  mrg 		      htab_alloc_with_arg alloc_f,
    296   1.1.1.2  mrg 		      htab_free_with_arg free_f)
    297   1.1.1.2  mrg {
    298       1.1  mrg   htab_t result;
    299       1.1  mrg   unsigned int size_prime_index;
    300       1.1  mrg 
    301       1.1  mrg   size_prime_index = higher_prime_index (size);
    302       1.1  mrg   size = prime_tab[size_prime_index].prime;
    303       1.1  mrg 
    304   1.1.1.2  mrg   result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
    305       1.1  mrg   if (result == NULL)
    306       1.1  mrg     return NULL;
    307  1.1.1.11  mrg   result->entries = (void **) (*alloc_f) (alloc_arg, size, sizeof (void *));
    308       1.1  mrg   if (result->entries == NULL)
    309       1.1  mrg     {
    310       1.1  mrg       if (free_f != NULL)
    311   1.1.1.2  mrg 	(*free_f) (alloc_arg, result);
    312       1.1  mrg       return NULL;
    313       1.1  mrg     }
    314       1.1  mrg   result->size = size;
    315       1.1  mrg   result->size_prime_index = size_prime_index;
    316       1.1  mrg   result->hash_f = hash_f;
    317       1.1  mrg   result->eq_f = eq_f;
    318       1.1  mrg   result->del_f = del_f;
    319   1.1.1.2  mrg   result->alloc_arg = alloc_arg;
    320   1.1.1.2  mrg   result->alloc_with_arg_f = alloc_f;
    321   1.1.1.2  mrg   result->free_with_arg_f = free_f;
    322       1.1  mrg   return result;
    323       1.1  mrg }
    324       1.1  mrg 
    325   1.1.1.2  mrg /*
    326   1.1.1.2  mrg 
    327   1.1.1.2  mrg @deftypefn Supplemental htab_t htab_create_typed_alloc (size_t @var{size}, @
    328   1.1.1.2  mrg htab_hash @var{hash_f}, htab_eq @var{eq_f}, htab_del @var{del_f}, @
    329   1.1.1.2  mrg htab_alloc @var{alloc_tab_f}, htab_alloc @var{alloc_f}, @
    330   1.1.1.2  mrg htab_free @var{free_f})
    331   1.1.1.2  mrg 
    332   1.1.1.2  mrg This function creates a hash table that uses two different allocators
    333   1.1.1.2  mrg @var{alloc_tab_f} and @var{alloc_f} to use for allocating the table itself
    334   1.1.1.2  mrg and its entries respectively.  This is useful when variables of different
    335   1.1.1.2  mrg types need to be allocated with different allocators.
    336   1.1.1.2  mrg 
    337   1.1.1.2  mrg The created hash table is slightly larger than @var{size} and it is
    338   1.1.1.2  mrg initially empty (all the hash table entries are @code{HTAB_EMPTY_ENTRY}).
    339   1.1.1.2  mrg The function returns the created hash table, or @code{NULL} if memory
    340   1.1.1.2  mrg allocation fails.
    341   1.1.1.2  mrg 
    342   1.1.1.2  mrg @end deftypefn
    343   1.1.1.2  mrg 
    344   1.1.1.2  mrg */
    345       1.1  mrg 
    346       1.1  mrg htab_t
    347   1.1.1.2  mrg htab_create_typed_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,
    348   1.1.1.2  mrg 			 htab_del del_f, htab_alloc alloc_tab_f,
    349   1.1.1.2  mrg 			 htab_alloc alloc_f, htab_free free_f)
    350       1.1  mrg {
    351       1.1  mrg   htab_t result;
    352       1.1  mrg   unsigned int size_prime_index;
    353       1.1  mrg 
    354       1.1  mrg   size_prime_index = higher_prime_index (size);
    355       1.1  mrg   size = prime_tab[size_prime_index].prime;
    356       1.1  mrg 
    357   1.1.1.2  mrg   result = (htab_t) (*alloc_tab_f) (1, sizeof (struct htab));
    358       1.1  mrg   if (result == NULL)
    359       1.1  mrg     return NULL;
    360  1.1.1.11  mrg   result->entries = (void **) (*alloc_f) (size, sizeof (void *));
    361       1.1  mrg   if (result->entries == NULL)
    362       1.1  mrg     {
    363       1.1  mrg       if (free_f != NULL)
    364   1.1.1.2  mrg 	(*free_f) (result);
    365       1.1  mrg       return NULL;
    366       1.1  mrg     }
    367       1.1  mrg   result->size = size;
    368       1.1  mrg   result->size_prime_index = size_prime_index;
    369       1.1  mrg   result->hash_f = hash_f;
    370       1.1  mrg   result->eq_f = eq_f;
    371       1.1  mrg   result->del_f = del_f;
    372   1.1.1.2  mrg   result->alloc_f = alloc_f;
    373   1.1.1.2  mrg   result->free_f = free_f;
    374       1.1  mrg   return result;
    375       1.1  mrg }
    376       1.1  mrg 
    377   1.1.1.2  mrg 
    378       1.1  mrg /* Update the function pointers and allocation parameter in the htab_t.  */
    379       1.1  mrg 
    380       1.1  mrg void
    381       1.1  mrg htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f,
    382  1.1.1.11  mrg                        htab_del del_f, void *alloc_arg,
    383       1.1  mrg                        htab_alloc_with_arg alloc_f, htab_free_with_arg free_f)
    384       1.1  mrg {
    385       1.1  mrg   htab->hash_f = hash_f;
    386       1.1  mrg   htab->eq_f = eq_f;
    387       1.1  mrg   htab->del_f = del_f;
    388       1.1  mrg   htab->alloc_arg = alloc_arg;
    389       1.1  mrg   htab->alloc_with_arg_f = alloc_f;
    390       1.1  mrg   htab->free_with_arg_f = free_f;
    391       1.1  mrg }
    392       1.1  mrg 
    393       1.1  mrg /* These functions exist solely for backward compatibility.  */
    394       1.1  mrg 
    395       1.1  mrg #undef htab_create
    396       1.1  mrg htab_t
    397       1.1  mrg htab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)
    398       1.1  mrg {
    399       1.1  mrg   return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);
    400       1.1  mrg }
    401       1.1  mrg 
    402       1.1  mrg htab_t
    403       1.1  mrg htab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)
    404       1.1  mrg {
    405       1.1  mrg   return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);
    406       1.1  mrg }
    407       1.1  mrg 
    408       1.1  mrg /* This function frees all memory allocated for given hash table.
    409       1.1  mrg    Naturally the hash table must already exist. */
    410       1.1  mrg 
    411       1.1  mrg void
    412       1.1  mrg htab_delete (htab_t htab)
    413       1.1  mrg {
    414       1.1  mrg   size_t size = htab_size (htab);
    415  1.1.1.11  mrg   void **entries = htab->entries;
    416       1.1  mrg   int i;
    417       1.1  mrg 
    418       1.1  mrg   if (htab->del_f)
    419       1.1  mrg     for (i = size - 1; i >= 0; i--)
    420       1.1  mrg       if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
    421       1.1  mrg 	(*htab->del_f) (entries[i]);
    422       1.1  mrg 
    423       1.1  mrg   if (htab->free_f != NULL)
    424       1.1  mrg     {
    425       1.1  mrg       (*htab->free_f) (entries);
    426       1.1  mrg       (*htab->free_f) (htab);
    427       1.1  mrg     }
    428       1.1  mrg   else if (htab->free_with_arg_f != NULL)
    429       1.1  mrg     {
    430       1.1  mrg       (*htab->free_with_arg_f) (htab->alloc_arg, entries);
    431       1.1  mrg       (*htab->free_with_arg_f) (htab->alloc_arg, htab);
    432       1.1  mrg     }
    433       1.1  mrg }
    434       1.1  mrg 
    435       1.1  mrg /* This function clears all entries in the given hash table.  */
    436       1.1  mrg 
    437       1.1  mrg void
    438       1.1  mrg htab_empty (htab_t htab)
    439       1.1  mrg {
    440       1.1  mrg   size_t size = htab_size (htab);
    441  1.1.1.11  mrg   void **entries = htab->entries;
    442       1.1  mrg   int i;
    443       1.1  mrg 
    444       1.1  mrg   if (htab->del_f)
    445       1.1  mrg     for (i = size - 1; i >= 0; i--)
    446       1.1  mrg       if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
    447       1.1  mrg 	(*htab->del_f) (entries[i]);
    448       1.1  mrg 
    449       1.1  mrg   /* Instead of clearing megabyte, downsize the table.  */
    450  1.1.1.11  mrg   if (size > 1024*1024 / sizeof (void *))
    451       1.1  mrg     {
    452  1.1.1.11  mrg       int nindex = higher_prime_index (1024 / sizeof (void *));
    453       1.1  mrg       int nsize = prime_tab[nindex].prime;
    454       1.1  mrg 
    455       1.1  mrg       if (htab->free_f != NULL)
    456       1.1  mrg 	(*htab->free_f) (htab->entries);
    457       1.1  mrg       else if (htab->free_with_arg_f != NULL)
    458       1.1  mrg 	(*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);
    459       1.1  mrg       if (htab->alloc_with_arg_f != NULL)
    460  1.1.1.11  mrg 	htab->entries = (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
    461  1.1.1.11  mrg 							     sizeof (void *));
    462       1.1  mrg       else
    463  1.1.1.11  mrg 	htab->entries = (void **) (*htab->alloc_f) (nsize, sizeof (void *));
    464       1.1  mrg      htab->size = nsize;
    465       1.1  mrg      htab->size_prime_index = nindex;
    466       1.1  mrg     }
    467       1.1  mrg   else
    468  1.1.1.11  mrg     memset (entries, 0, size * sizeof (void *));
    469       1.1  mrg   htab->n_deleted = 0;
    470       1.1  mrg   htab->n_elements = 0;
    471       1.1  mrg }
    472       1.1  mrg 
    473       1.1  mrg /* Similar to htab_find_slot, but without several unwanted side effects:
    474       1.1  mrg     - Does not call htab->eq_f when it finds an existing entry.
    475       1.1  mrg     - Does not change the count of elements/searches/collisions in the
    476       1.1  mrg       hash table.
    477       1.1  mrg    This function also assumes there are no deleted entries in the table.
    478       1.1  mrg    HASH is the hash value for the element to be inserted.  */
    479       1.1  mrg 
    480  1.1.1.11  mrg static void **
    481       1.1  mrg find_empty_slot_for_expand (htab_t htab, hashval_t hash)
    482       1.1  mrg {
    483       1.1  mrg   hashval_t index = htab_mod (hash, htab);
    484       1.1  mrg   size_t size = htab_size (htab);
    485  1.1.1.11  mrg   void **slot = htab->entries + index;
    486       1.1  mrg   hashval_t hash2;
    487       1.1  mrg 
    488       1.1  mrg   if (*slot == HTAB_EMPTY_ENTRY)
    489       1.1  mrg     return slot;
    490       1.1  mrg   else if (*slot == HTAB_DELETED_ENTRY)
    491       1.1  mrg     abort ();
    492       1.1  mrg 
    493       1.1  mrg   hash2 = htab_mod_m2 (hash, htab);
    494       1.1  mrg   for (;;)
    495       1.1  mrg     {
    496       1.1  mrg       index += hash2;
    497       1.1  mrg       if (index >= size)
    498       1.1  mrg 	index -= size;
    499       1.1  mrg 
    500       1.1  mrg       slot = htab->entries + index;
    501       1.1  mrg       if (*slot == HTAB_EMPTY_ENTRY)
    502       1.1  mrg 	return slot;
    503       1.1  mrg       else if (*slot == HTAB_DELETED_ENTRY)
    504       1.1  mrg 	abort ();
    505       1.1  mrg     }
    506       1.1  mrg }
    507       1.1  mrg 
    508       1.1  mrg /* The following function changes size of memory allocated for the
    509       1.1  mrg    entries and repeatedly inserts the table elements.  The occupancy
    510       1.1  mrg    of the table after the call will be about 50%.  Naturally the hash
    511       1.1  mrg    table must already exist.  Remember also that the place of the
    512       1.1  mrg    table entries is changed.  If memory allocation failures are allowed,
    513       1.1  mrg    this function will return zero, indicating that the table could not be
    514       1.1  mrg    expanded.  If all goes well, it will return a non-zero value.  */
    515       1.1  mrg 
    516       1.1  mrg static int
    517       1.1  mrg htab_expand (htab_t htab)
    518       1.1  mrg {
    519  1.1.1.11  mrg   void **oentries;
    520  1.1.1.11  mrg   void **olimit;
    521  1.1.1.11  mrg   void **p;
    522  1.1.1.11  mrg   void **nentries;
    523       1.1  mrg   size_t nsize, osize, elts;
    524       1.1  mrg   unsigned int oindex, nindex;
    525       1.1  mrg 
    526       1.1  mrg   oentries = htab->entries;
    527       1.1  mrg   oindex = htab->size_prime_index;
    528       1.1  mrg   osize = htab->size;
    529       1.1  mrg   olimit = oentries + osize;
    530       1.1  mrg   elts = htab_elements (htab);
    531       1.1  mrg 
    532       1.1  mrg   /* Resize only when table after removal of unused elements is either
    533       1.1  mrg      too full or too empty.  */
    534       1.1  mrg   if (elts * 2 > osize || (elts * 8 < osize && osize > 32))
    535       1.1  mrg     {
    536       1.1  mrg       nindex = higher_prime_index (elts * 2);
    537       1.1  mrg       nsize = prime_tab[nindex].prime;
    538       1.1  mrg     }
    539       1.1  mrg   else
    540       1.1  mrg     {
    541       1.1  mrg       nindex = oindex;
    542       1.1  mrg       nsize = osize;
    543       1.1  mrg     }
    544       1.1  mrg 
    545       1.1  mrg   if (htab->alloc_with_arg_f != NULL)
    546  1.1.1.11  mrg     nentries = (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
    547  1.1.1.11  mrg 						    sizeof (void *));
    548       1.1  mrg   else
    549  1.1.1.11  mrg     nentries = (void **) (*htab->alloc_f) (nsize, sizeof (void *));
    550       1.1  mrg   if (nentries == NULL)
    551       1.1  mrg     return 0;
    552       1.1  mrg   htab->entries = nentries;
    553       1.1  mrg   htab->size = nsize;
    554       1.1  mrg   htab->size_prime_index = nindex;
    555       1.1  mrg   htab->n_elements -= htab->n_deleted;
    556       1.1  mrg   htab->n_deleted = 0;
    557       1.1  mrg 
    558       1.1  mrg   p = oentries;
    559       1.1  mrg   do
    560       1.1  mrg     {
    561  1.1.1.11  mrg       void *x = *p;
    562       1.1  mrg 
    563       1.1  mrg       if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
    564       1.1  mrg 	{
    565  1.1.1.11  mrg 	  void **q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
    566       1.1  mrg 
    567       1.1  mrg 	  *q = x;
    568       1.1  mrg 	}
    569       1.1  mrg 
    570       1.1  mrg       p++;
    571       1.1  mrg     }
    572       1.1  mrg   while (p < olimit);
    573       1.1  mrg 
    574       1.1  mrg   if (htab->free_f != NULL)
    575       1.1  mrg     (*htab->free_f) (oentries);
    576       1.1  mrg   else if (htab->free_with_arg_f != NULL)
    577       1.1  mrg     (*htab->free_with_arg_f) (htab->alloc_arg, oentries);
    578       1.1  mrg   return 1;
    579       1.1  mrg }
    580       1.1  mrg 
    581       1.1  mrg /* This function searches for a hash table entry equal to the given
    582       1.1  mrg    element.  It cannot be used to insert or delete an element.  */
    583       1.1  mrg 
    584  1.1.1.11  mrg void *
    585  1.1.1.11  mrg htab_find_with_hash (htab_t htab, const void *element, hashval_t hash)
    586       1.1  mrg {
    587       1.1  mrg   hashval_t index, hash2;
    588       1.1  mrg   size_t size;
    589  1.1.1.11  mrg   void *entry;
    590       1.1  mrg 
    591       1.1  mrg   htab->searches++;
    592       1.1  mrg   size = htab_size (htab);
    593       1.1  mrg   index = htab_mod (hash, htab);
    594       1.1  mrg 
    595       1.1  mrg   entry = htab->entries[index];
    596       1.1  mrg   if (entry == HTAB_EMPTY_ENTRY
    597       1.1  mrg       || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
    598       1.1  mrg     return entry;
    599       1.1  mrg 
    600       1.1  mrg   hash2 = htab_mod_m2 (hash, htab);
    601       1.1  mrg   for (;;)
    602       1.1  mrg     {
    603       1.1  mrg       htab->collisions++;
    604       1.1  mrg       index += hash2;
    605       1.1  mrg       if (index >= size)
    606       1.1  mrg 	index -= size;
    607       1.1  mrg 
    608       1.1  mrg       entry = htab->entries[index];
    609       1.1  mrg       if (entry == HTAB_EMPTY_ENTRY
    610       1.1  mrg 	  || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
    611       1.1  mrg 	return entry;
    612       1.1  mrg     }
    613       1.1  mrg }
    614       1.1  mrg 
    615       1.1  mrg /* Like htab_find_slot_with_hash, but compute the hash value from the
    616       1.1  mrg    element.  */
    617       1.1  mrg 
    618  1.1.1.11  mrg void *
    619  1.1.1.11  mrg htab_find (htab_t htab, const void *element)
    620       1.1  mrg {
    621       1.1  mrg   return htab_find_with_hash (htab, element, (*htab->hash_f) (element));
    622       1.1  mrg }
    623       1.1  mrg 
    624       1.1  mrg /* This function searches for a hash table slot containing an entry
    625       1.1  mrg    equal to the given element.  To delete an entry, call this with
    626       1.1  mrg    insert=NO_INSERT, then call htab_clear_slot on the slot returned
    627       1.1  mrg    (possibly after doing some checks).  To insert an entry, call this
    628       1.1  mrg    with insert=INSERT, then write the value you want into the returned
    629       1.1  mrg    slot.  When inserting an entry, NULL may be returned if memory
    630       1.1  mrg    allocation fails.  */
    631       1.1  mrg 
    632  1.1.1.11  mrg void **
    633  1.1.1.11  mrg htab_find_slot_with_hash (htab_t htab, const void *element,
    634       1.1  mrg                           hashval_t hash, enum insert_option insert)
    635       1.1  mrg {
    636  1.1.1.11  mrg   void **first_deleted_slot;
    637       1.1  mrg   hashval_t index, hash2;
    638       1.1  mrg   size_t size;
    639  1.1.1.11  mrg   void *entry;
    640       1.1  mrg 
    641       1.1  mrg   size = htab_size (htab);
    642       1.1  mrg   if (insert == INSERT && size * 3 <= htab->n_elements * 4)
    643       1.1  mrg     {
    644       1.1  mrg       if (htab_expand (htab) == 0)
    645       1.1  mrg 	return NULL;
    646       1.1  mrg       size = htab_size (htab);
    647       1.1  mrg     }
    648       1.1  mrg 
    649       1.1  mrg   index = htab_mod (hash, htab);
    650       1.1  mrg 
    651       1.1  mrg   htab->searches++;
    652       1.1  mrg   first_deleted_slot = NULL;
    653       1.1  mrg 
    654       1.1  mrg   entry = htab->entries[index];
    655       1.1  mrg   if (entry == HTAB_EMPTY_ENTRY)
    656       1.1  mrg     goto empty_entry;
    657       1.1  mrg   else if (entry == HTAB_DELETED_ENTRY)
    658       1.1  mrg     first_deleted_slot = &htab->entries[index];
    659       1.1  mrg   else if ((*htab->eq_f) (entry, element))
    660       1.1  mrg     return &htab->entries[index];
    661       1.1  mrg 
    662       1.1  mrg   hash2 = htab_mod_m2 (hash, htab);
    663       1.1  mrg   for (;;)
    664       1.1  mrg     {
    665       1.1  mrg       htab->collisions++;
    666       1.1  mrg       index += hash2;
    667       1.1  mrg       if (index >= size)
    668       1.1  mrg 	index -= size;
    669       1.1  mrg 
    670       1.1  mrg       entry = htab->entries[index];
    671       1.1  mrg       if (entry == HTAB_EMPTY_ENTRY)
    672       1.1  mrg 	goto empty_entry;
    673       1.1  mrg       else if (entry == HTAB_DELETED_ENTRY)
    674       1.1  mrg 	{
    675       1.1  mrg 	  if (!first_deleted_slot)
    676       1.1  mrg 	    first_deleted_slot = &htab->entries[index];
    677       1.1  mrg 	}
    678       1.1  mrg       else if ((*htab->eq_f) (entry, element))
    679       1.1  mrg 	return &htab->entries[index];
    680       1.1  mrg     }
    681       1.1  mrg 
    682       1.1  mrg  empty_entry:
    683       1.1  mrg   if (insert == NO_INSERT)
    684       1.1  mrg     return NULL;
    685       1.1  mrg 
    686       1.1  mrg   if (first_deleted_slot)
    687       1.1  mrg     {
    688       1.1  mrg       htab->n_deleted--;
    689       1.1  mrg       *first_deleted_slot = HTAB_EMPTY_ENTRY;
    690       1.1  mrg       return first_deleted_slot;
    691       1.1  mrg     }
    692       1.1  mrg 
    693       1.1  mrg   htab->n_elements++;
    694       1.1  mrg   return &htab->entries[index];
    695       1.1  mrg }
    696       1.1  mrg 
    697       1.1  mrg /* Like htab_find_slot_with_hash, but compute the hash value from the
    698       1.1  mrg    element.  */
    699       1.1  mrg 
    700  1.1.1.11  mrg void **
    701  1.1.1.11  mrg htab_find_slot (htab_t htab, const void *element, enum insert_option insert)
    702       1.1  mrg {
    703       1.1  mrg   return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
    704       1.1  mrg 				   insert);
    705       1.1  mrg }
    706       1.1  mrg 
    707       1.1  mrg /* This function deletes an element with the given value from hash
    708       1.1  mrg    table (the hash is computed from the element).  If there is no matching
    709       1.1  mrg    element in the hash table, this function does nothing.  */
    710       1.1  mrg 
    711       1.1  mrg void
    712  1.1.1.11  mrg htab_remove_elt (htab_t htab, const void *element)
    713       1.1  mrg {
    714       1.1  mrg   htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element));
    715       1.1  mrg }
    716       1.1  mrg 
    717       1.1  mrg 
    718       1.1  mrg /* This function deletes an element with the given value from hash
    719       1.1  mrg    table.  If there is no matching element in the hash table, this
    720       1.1  mrg    function does nothing.  */
    721       1.1  mrg 
    722       1.1  mrg void
    723  1.1.1.11  mrg htab_remove_elt_with_hash (htab_t htab, const void *element, hashval_t hash)
    724       1.1  mrg {
    725  1.1.1.11  mrg   void **slot;
    726       1.1  mrg 
    727       1.1  mrg   slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
    728   1.1.1.8  mrg   if (slot == NULL)
    729       1.1  mrg     return;
    730       1.1  mrg 
    731       1.1  mrg   if (htab->del_f)
    732       1.1  mrg     (*htab->del_f) (*slot);
    733       1.1  mrg 
    734       1.1  mrg   *slot = HTAB_DELETED_ENTRY;
    735       1.1  mrg   htab->n_deleted++;
    736       1.1  mrg }
    737       1.1  mrg 
    738       1.1  mrg /* This function clears a specified slot in a hash table.  It is
    739       1.1  mrg    useful when you've already done the lookup and don't want to do it
    740       1.1  mrg    again.  */
    741       1.1  mrg 
    742       1.1  mrg void
    743  1.1.1.11  mrg htab_clear_slot (htab_t htab, void **slot)
    744       1.1  mrg {
    745       1.1  mrg   if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
    746       1.1  mrg       || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY)
    747       1.1  mrg     abort ();
    748       1.1  mrg 
    749       1.1  mrg   if (htab->del_f)
    750       1.1  mrg     (*htab->del_f) (*slot);
    751       1.1  mrg 
    752       1.1  mrg   *slot = HTAB_DELETED_ENTRY;
    753       1.1  mrg   htab->n_deleted++;
    754       1.1  mrg }
    755       1.1  mrg 
    756       1.1  mrg /* This function scans over the entire hash table calling
    757       1.1  mrg    CALLBACK for each live entry.  If CALLBACK returns false,
    758       1.1  mrg    the iteration stops.  INFO is passed as CALLBACK's second
    759       1.1  mrg    argument.  */
    760       1.1  mrg 
    761       1.1  mrg void
    762  1.1.1.11  mrg htab_traverse_noresize (htab_t htab, htab_trav callback, void *info)
    763       1.1  mrg {
    764  1.1.1.11  mrg   void **slot;
    765  1.1.1.11  mrg   void **limit;
    766       1.1  mrg 
    767       1.1  mrg   slot = htab->entries;
    768       1.1  mrg   limit = slot + htab_size (htab);
    769       1.1  mrg 
    770       1.1  mrg   do
    771       1.1  mrg     {
    772  1.1.1.11  mrg       void *x = *slot;
    773       1.1  mrg 
    774       1.1  mrg       if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
    775       1.1  mrg 	if (!(*callback) (slot, info))
    776       1.1  mrg 	  break;
    777       1.1  mrg     }
    778       1.1  mrg   while (++slot < limit);
    779       1.1  mrg }
    780       1.1  mrg 
    781       1.1  mrg /* Like htab_traverse_noresize, but does resize the table when it is
    782       1.1  mrg    too empty to improve effectivity of subsequent calls.  */
    783       1.1  mrg 
    784       1.1  mrg void
    785  1.1.1.11  mrg htab_traverse (htab_t htab, htab_trav callback, void *info)
    786       1.1  mrg {
    787       1.1  mrg   size_t size = htab_size (htab);
    788       1.1  mrg   if (htab_elements (htab) * 8 < size && size > 32)
    789       1.1  mrg     htab_expand (htab);
    790       1.1  mrg 
    791       1.1  mrg   htab_traverse_noresize (htab, callback, info);
    792       1.1  mrg }
    793       1.1  mrg 
    794       1.1  mrg /* Return the fraction of fixed collisions during all work with given
    795       1.1  mrg    hash table. */
    796       1.1  mrg 
    797       1.1  mrg double
    798       1.1  mrg htab_collisions (htab_t htab)
    799       1.1  mrg {
    800       1.1  mrg   if (htab->searches == 0)
    801       1.1  mrg     return 0.0;
    802       1.1  mrg 
    803       1.1  mrg   return (double) htab->collisions / (double) htab->searches;
    804       1.1  mrg }
    805       1.1  mrg 
    806       1.1  mrg /* Hash P as a null-terminated string.
    807       1.1  mrg 
    808       1.1  mrg    Copied from gcc/hashtable.c.  Zack had the following to say with respect
    809       1.1  mrg    to applicability, though note that unlike hashtable.c, this hash table
    810       1.1  mrg    implementation re-hashes rather than chain buckets.
    811       1.1  mrg 
    812       1.1  mrg    http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html
    813       1.1  mrg    From: Zack Weinberg <zackw (at) panix.com>
    814       1.1  mrg    Date: Fri, 17 Aug 2001 02:15:56 -0400
    815       1.1  mrg 
    816       1.1  mrg    I got it by extracting all the identifiers from all the source code
    817       1.1  mrg    I had lying around in mid-1999, and testing many recurrences of
    818       1.1  mrg    the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either
    819       1.1  mrg    prime numbers or the appropriate identity.  This was the best one.
    820       1.1  mrg    I don't remember exactly what constituted "best", except I was
    821       1.1  mrg    looking at bucket-length distributions mostly.
    822       1.1  mrg 
    823       1.1  mrg    So it should be very good at hashing identifiers, but might not be
    824       1.1  mrg    as good at arbitrary strings.
    825       1.1  mrg 
    826       1.1  mrg    I'll add that it thoroughly trounces the hash functions recommended
    827       1.1  mrg    for this use at http://burtleburtle.net/bob/hash/index.html, both
    828       1.1  mrg    on speed and bucket distribution.  I haven't tried it against the
    829       1.1  mrg    function they just started using for Perl's hashes.  */
    830       1.1  mrg 
    831       1.1  mrg hashval_t
    832  1.1.1.11  mrg htab_hash_string (const void *p)
    833       1.1  mrg {
    834       1.1  mrg   const unsigned char *str = (const unsigned char *) p;
    835       1.1  mrg   hashval_t r = 0;
    836       1.1  mrg   unsigned char c;
    837       1.1  mrg 
    838       1.1  mrg   while ((c = *str++) != 0)
    839       1.1  mrg     r = r * 67 + c - 113;
    840       1.1  mrg 
    841       1.1  mrg   return r;
    842       1.1  mrg }
    843       1.1  mrg 
    844  1.1.1.10  mrg /* An equality function for null-terminated strings.  */
    845  1.1.1.10  mrg int
    846  1.1.1.10  mrg htab_eq_string (const void *a, const void *b)
    847  1.1.1.10  mrg {
    848  1.1.1.10  mrg   return strcmp ((const char *) a, (const char *) b) == 0;
    849  1.1.1.10  mrg }
    850  1.1.1.10  mrg 
    851       1.1  mrg /* DERIVED FROM:
    852       1.1  mrg --------------------------------------------------------------------
    853       1.1  mrg lookup2.c, by Bob Jenkins, December 1996, Public Domain.
    854       1.1  mrg hash(), hash2(), hash3, and mix() are externally useful functions.
    855       1.1  mrg Routines to test the hash are included if SELF_TEST is defined.
    856       1.1  mrg You can use this free for any purpose.  It has no warranty.
    857       1.1  mrg --------------------------------------------------------------------
    858       1.1  mrg */
    859       1.1  mrg 
    860       1.1  mrg /*
    861       1.1  mrg --------------------------------------------------------------------
    862       1.1  mrg mix -- mix 3 32-bit values reversibly.
    863       1.1  mrg For every delta with one or two bit set, and the deltas of all three
    864       1.1  mrg   high bits or all three low bits, whether the original value of a,b,c
    865       1.1  mrg   is almost all zero or is uniformly distributed,
    866       1.1  mrg * If mix() is run forward or backward, at least 32 bits in a,b,c
    867       1.1  mrg   have at least 1/4 probability of changing.
    868       1.1  mrg * If mix() is run forward, every bit of c will change between 1/3 and
    869       1.1  mrg   2/3 of the time.  (Well, 22/100 and 78/100 for some 2-bit deltas.)
    870       1.1  mrg mix() was built out of 36 single-cycle latency instructions in a
    871       1.1  mrg   structure that could supported 2x parallelism, like so:
    872       1.1  mrg       a -= b;
    873       1.1  mrg       a -= c; x = (c>>13);
    874       1.1  mrg       b -= c; a ^= x;
    875       1.1  mrg       b -= a; x = (a<<8);
    876       1.1  mrg       c -= a; b ^= x;
    877       1.1  mrg       c -= b; x = (b>>13);
    878       1.1  mrg       ...
    879       1.1  mrg   Unfortunately, superscalar Pentiums and Sparcs can't take advantage
    880       1.1  mrg   of that parallelism.  They've also turned some of those single-cycle
    881       1.1  mrg   latency instructions into multi-cycle latency instructions.  Still,
    882       1.1  mrg   this is the fastest good hash I could find.  There were about 2^^68
    883       1.1  mrg   to choose from.  I only looked at a billion or so.
    884       1.1  mrg --------------------------------------------------------------------
    885       1.1  mrg */
    886       1.1  mrg /* same, but slower, works on systems that might have 8 byte hashval_t's */
    887       1.1  mrg #define mix(a,b,c) \
    888       1.1  mrg { \
    889       1.1  mrg   a -= b; a -= c; a ^= (c>>13); \
    890       1.1  mrg   b -= c; b -= a; b ^= (a<< 8); \
    891       1.1  mrg   c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
    892       1.1  mrg   a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
    893       1.1  mrg   b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
    894       1.1  mrg   c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
    895       1.1  mrg   a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
    896       1.1  mrg   b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
    897       1.1  mrg   c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
    898       1.1  mrg }
    899       1.1  mrg 
    900       1.1  mrg /*
    901       1.1  mrg --------------------------------------------------------------------
    902       1.1  mrg hash() -- hash a variable-length key into a 32-bit value
    903       1.1  mrg   k     : the key (the unaligned variable-length array of bytes)
    904       1.1  mrg   len   : the length of the key, counting by bytes
    905       1.1  mrg   level : can be any 4-byte value
    906       1.1  mrg Returns a 32-bit value.  Every bit of the key affects every bit of
    907       1.1  mrg the return value.  Every 1-bit and 2-bit delta achieves avalanche.
    908       1.1  mrg About 36+6len instructions.
    909       1.1  mrg 
    910       1.1  mrg The best hash table sizes are powers of 2.  There is no need to do
    911       1.1  mrg mod a prime (mod is sooo slow!).  If you need less than 32 bits,
    912       1.1  mrg use a bitmask.  For example, if you need only 10 bits, do
    913       1.1  mrg   h = (h & hashmask(10));
    914       1.1  mrg In which case, the hash table should have hashsize(10) elements.
    915       1.1  mrg 
    916       1.1  mrg If you are hashing n strings (ub1 **)k, do it like this:
    917       1.1  mrg   for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);
    918       1.1  mrg 
    919       1.1  mrg By Bob Jenkins, 1996.  bob_jenkins (at) burtleburtle.net.  You may use this
    920       1.1  mrg code any way you wish, private, educational, or commercial.  It's free.
    921       1.1  mrg 
    922       1.1  mrg See http://burtleburtle.net/bob/hash/evahash.html
    923       1.1  mrg Use for hash table lookup, or anything where one collision in 2^32 is
    924       1.1  mrg acceptable.  Do NOT use for cryptographic purposes.
    925       1.1  mrg --------------------------------------------------------------------
    926       1.1  mrg */
    927       1.1  mrg 
    928       1.1  mrg hashval_t
    929  1.1.1.11  mrg iterative_hash (const void *k_in /* the key */,
    930       1.1  mrg                 register size_t  length /* the length of the key */,
    931       1.1  mrg                 register hashval_t initval /* the previous hash, or
    932       1.1  mrg                                               an arbitrary value */)
    933       1.1  mrg {
    934       1.1  mrg   register const unsigned char *k = (const unsigned char *)k_in;
    935       1.1  mrg   register hashval_t a,b,c,len;
    936       1.1  mrg 
    937       1.1  mrg   /* Set up the internal state */
    938       1.1  mrg   len = length;
    939       1.1  mrg   a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
    940       1.1  mrg   c = initval;           /* the previous hash value */
    941       1.1  mrg 
    942       1.1  mrg   /*---------------------------------------- handle most of the key */
    943  1.1.1.11  mrg   /* Provide specialization for the aligned case for targets that cannot
    944  1.1.1.11  mrg      efficiently perform misaligned loads of a merged access.  */
    945  1.1.1.11  mrg   if ((((size_t)k)&3) == 0)
    946  1.1.1.11  mrg     while (len >= 12)
    947       1.1  mrg       {
    948  1.1.1.11  mrg 	a += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24));
    949  1.1.1.11  mrg 	b += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24));
    950  1.1.1.11  mrg 	c += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24));
    951       1.1  mrg 	mix(a,b,c);
    952       1.1  mrg 	k += 12; len -= 12;
    953       1.1  mrg       }
    954       1.1  mrg   else /* unaligned */
    955       1.1  mrg     while (len >= 12)
    956       1.1  mrg       {
    957  1.1.1.11  mrg 	a += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24));
    958  1.1.1.11  mrg 	b += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24));
    959  1.1.1.11  mrg 	c += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24));
    960       1.1  mrg 	mix(a,b,c);
    961       1.1  mrg 	k += 12; len -= 12;
    962       1.1  mrg       }
    963       1.1  mrg 
    964       1.1  mrg   /*------------------------------------- handle the last 11 bytes */
    965       1.1  mrg   c += length;
    966       1.1  mrg   switch(len)              /* all the case statements fall through */
    967       1.1  mrg     {
    968   1.1.1.4  mrg     case 11: c+=((hashval_t)k[10]<<24);	/* fall through */
    969   1.1.1.4  mrg     case 10: c+=((hashval_t)k[9]<<16);	/* fall through */
    970   1.1.1.4  mrg     case 9 : c+=((hashval_t)k[8]<<8);	/* fall through */
    971       1.1  mrg       /* the first byte of c is reserved for the length */
    972   1.1.1.4  mrg     case 8 : b+=((hashval_t)k[7]<<24);	/* fall through */
    973   1.1.1.4  mrg     case 7 : b+=((hashval_t)k[6]<<16);	/* fall through */
    974   1.1.1.4  mrg     case 6 : b+=((hashval_t)k[5]<<8);	/* fall through */
    975   1.1.1.4  mrg     case 5 : b+=k[4];			/* fall through */
    976   1.1.1.4  mrg     case 4 : a+=((hashval_t)k[3]<<24);	/* fall through */
    977   1.1.1.4  mrg     case 3 : a+=((hashval_t)k[2]<<16);	/* fall through */
    978   1.1.1.4  mrg     case 2 : a+=((hashval_t)k[1]<<8);	/* fall through */
    979       1.1  mrg     case 1 : a+=k[0];
    980       1.1  mrg       /* case 0: nothing left to add */
    981       1.1  mrg     }
    982       1.1  mrg   mix(a,b,c);
    983       1.1  mrg   /*-------------------------------------------- report the result */
    984       1.1  mrg   return c;
    985       1.1  mrg }
    986   1.1.1.3  mrg 
    987   1.1.1.3  mrg /* Returns a hash code for pointer P. Simplified version of evahash */
    988   1.1.1.3  mrg 
    989   1.1.1.3  mrg static hashval_t
    990  1.1.1.11  mrg hash_pointer (const void *p)
    991   1.1.1.3  mrg {
    992   1.1.1.3  mrg   intptr_t v = (intptr_t) p;
    993   1.1.1.3  mrg   unsigned a, b, c;
    994   1.1.1.3  mrg 
    995   1.1.1.3  mrg   a = b = 0x9e3779b9;
    996   1.1.1.3  mrg   a += v >> (sizeof (intptr_t) * CHAR_BIT / 2);
    997   1.1.1.3  mrg   b += v & (((intptr_t) 1 << (sizeof (intptr_t) * CHAR_BIT / 2)) - 1);
    998   1.1.1.3  mrg   c = 0x42135234;
    999   1.1.1.3  mrg   mix (a, b, c);
   1000   1.1.1.3  mrg   return c;
   1001   1.1.1.3  mrg }
   1002