Merge from vendor branch DHCP:
[dragonfly.git] / contrib / gcc-3.4 / libiberty / hashtab.c
1 /* An expandable hash tables datatype.  
2    Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
3    Contributed by Vladimir Makarov (vmakarov@cygnus.com).
4
5 This file is part of the libiberty library.
6 Libiberty is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 Libiberty is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public
17 License along with libiberty; see the file COPYING.LIB.  If
18 not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA.  */
20
21 /* This package implements basic hash table functionality.  It is possible
22    to search for an entry, create an entry and destroy an entry.
23
24    Elements in the table are generic pointers.
25
26    The size of the table is not fixed; if the occupancy of the table
27    grows too high the hash table will be expanded.
28
29    The abstract data implementation is based on generalized Algorithm D
30    from Knuth's book "The art of computer programming".  Hash table is
31    expanded by creation of new hash table and transferring elements from
32    the old table to the new table. */
33
34 #ifdef HAVE_CONFIG_H
35 #include "config.h"
36 #endif
37
38 #include <sys/types.h>
39
40 #ifdef HAVE_STDLIB_H
41 #include <stdlib.h>
42 #endif
43
44 #ifdef HAVE_STRING_H
45 #include <string.h>
46 #endif
47
48 #ifdef HAVE_MALLOC_H
49 #include <malloc.h>
50 #endif
51
52 #include <stdio.h>
53
54 #include "libiberty.h"
55 #include "hashtab.h"
56
57 /* This macro defines reserved value for empty table entry. */
58
59 #define EMPTY_ENTRY    ((PTR) 0)
60
61 /* This macro defines reserved value for table entry which contained
62    a deleted element. */
63
64 #define DELETED_ENTRY  ((PTR) 1)
65
66 static unsigned long higher_prime_number PARAMS ((unsigned long));
67 static hashval_t hash_pointer PARAMS ((const void *));
68 static int eq_pointer PARAMS ((const void *, const void *));
69 static int htab_expand PARAMS ((htab_t));
70 static PTR *find_empty_slot_for_expand  PARAMS ((htab_t, hashval_t));
71
72 /* At some point, we could make these be NULL, and modify the
73    hash-table routines to handle NULL specially; that would avoid
74    function-call overhead for the common case of hashing pointers.  */
75 htab_hash htab_hash_pointer = hash_pointer;
76 htab_eq htab_eq_pointer = eq_pointer;
77
78 /* The following function returns a nearest prime number which is
79    greater than N, and near a power of two. */
80
81 static unsigned long
82 higher_prime_number (n)
83      unsigned long n;
84 {
85   /* These are primes that are near, but slightly smaller than, a
86      power of two.  */
87   static const unsigned long primes[] = {
88     (unsigned long) 7,
89     (unsigned long) 13,
90     (unsigned long) 31,
91     (unsigned long) 61,
92     (unsigned long) 127,
93     (unsigned long) 251,
94     (unsigned long) 509,
95     (unsigned long) 1021,
96     (unsigned long) 2039,
97     (unsigned long) 4093,
98     (unsigned long) 8191,
99     (unsigned long) 16381,
100     (unsigned long) 32749,
101     (unsigned long) 65521,
102     (unsigned long) 131071,
103     (unsigned long) 262139,
104     (unsigned long) 524287,
105     (unsigned long) 1048573,
106     (unsigned long) 2097143,
107     (unsigned long) 4194301,
108     (unsigned long) 8388593,
109     (unsigned long) 16777213,
110     (unsigned long) 33554393,
111     (unsigned long) 67108859,
112     (unsigned long) 134217689,
113     (unsigned long) 268435399,
114     (unsigned long) 536870909,
115     (unsigned long) 1073741789,
116     (unsigned long) 2147483647,
117                                         /* 4294967291L */
118     ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
119   };
120
121   const unsigned long *low = &primes[0];
122   const unsigned long *high = &primes[sizeof(primes) / sizeof(primes[0])];
123
124   while (low != high)
125     {
126       const unsigned long *mid = low + (high - low) / 2;
127       if (n > *mid)
128         low = mid + 1;
129       else
130         high = mid;
131     }
132
133   /* If we've run out of primes, abort.  */
134   if (n > *low)
135     {
136       fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
137       abort ();
138     }
139
140   return *low;
141 }
142
143 /* Returns a hash code for P.  */
144
145 static hashval_t
146 hash_pointer (p)
147      const PTR p;
148 {
149   return (hashval_t) ((long)p >> 3);
150 }
151
152 /* Returns non-zero if P1 and P2 are equal.  */
153
154 static int
155 eq_pointer (p1, p2)
156      const PTR p1;
157      const PTR p2;
158 {
159   return p1 == p2;
160 }
161
162 /* This function creates table with length slightly longer than given
163    source length.  Created hash table is initiated as empty (all the
164    hash table entries are EMPTY_ENTRY).  The function returns the
165    created hash table, or NULL if memory allocation fails.  */
166
167 htab_t
168 htab_create_alloc (size, hash_f, eq_f, del_f, alloc_f, free_f)
169      size_t size;
170      htab_hash hash_f;
171      htab_eq eq_f;
172      htab_del del_f;
173      htab_alloc alloc_f;
174      htab_free free_f;
175 {
176   htab_t result;
177
178   size = higher_prime_number (size);
179   result = (htab_t) (*alloc_f) (1, sizeof (struct htab));
180   if (result == NULL)
181     return NULL;
182   result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR));
183   if (result->entries == NULL)
184     {
185       if (free_f != NULL)
186         (*free_f) (result);
187       return NULL;
188     }
189   result->size = size;
190   result->hash_f = hash_f;
191   result->eq_f = eq_f;
192   result->del_f = del_f;
193   result->alloc_f = alloc_f;
194   result->free_f = free_f;
195   return result;
196 }
197
198 /* As above, but use the variants of alloc_f and free_f which accept
199    an extra argument.  */
200
201 htab_t
202 htab_create_alloc_ex (size, hash_f, eq_f, del_f, alloc_arg, alloc_f,
203                       free_f)
204      size_t size;
205      htab_hash hash_f;
206      htab_eq eq_f;
207      htab_del del_f;
208      PTR alloc_arg;
209      htab_alloc_with_arg alloc_f;
210      htab_free_with_arg free_f;
211 {
212   htab_t result;
213
214   size = higher_prime_number (size);
215   result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
216   if (result == NULL)
217     return NULL;
218   result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR));
219   if (result->entries == NULL)
220     {
221       if (free_f != NULL)
222         (*free_f) (alloc_arg, result);
223       return NULL;
224     }
225   result->size = size;
226   result->hash_f = hash_f;
227   result->eq_f = eq_f;
228   result->del_f = del_f;
229   result->alloc_arg = alloc_arg;
230   result->alloc_with_arg_f = alloc_f;
231   result->free_with_arg_f = free_f;
232   return result;
233 }
234
235 /* Update the function pointers and allocation parameter in the htab_t.  */
236
237 void
238 htab_set_functions_ex (htab, hash_f, eq_f, del_f, alloc_arg, alloc_f, free_f)
239      htab_t htab;
240      htab_hash hash_f;
241      htab_eq eq_f;
242      htab_del del_f;
243      PTR alloc_arg;
244      htab_alloc_with_arg alloc_f;
245      htab_free_with_arg free_f;
246 {
247   htab->hash_f = hash_f;
248   htab->eq_f = eq_f;
249   htab->del_f = del_f;
250   htab->alloc_arg = alloc_arg;
251   htab->alloc_with_arg_f = alloc_f;
252   htab->free_with_arg_f = free_f;
253 }
254
255 /* These functions exist solely for backward compatibility.  */
256
257 #undef htab_create
258 htab_t
259 htab_create (size, hash_f, eq_f, del_f)
260      size_t size;
261      htab_hash hash_f;
262      htab_eq eq_f;
263      htab_del del_f;
264 {
265   return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);
266 }
267
268 htab_t
269 htab_try_create (size, hash_f, eq_f, del_f)
270      size_t size;
271      htab_hash hash_f;
272      htab_eq eq_f;
273      htab_del del_f;
274 {
275   return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);
276 }
277
278 /* This function frees all memory allocated for given hash table.
279    Naturally the hash table must already exist. */
280
281 void
282 htab_delete (htab)
283      htab_t htab;
284 {
285   int i;
286
287   if (htab->del_f)
288     for (i = htab->size - 1; i >= 0; i--)
289       if (htab->entries[i] != EMPTY_ENTRY
290           && htab->entries[i] != DELETED_ENTRY)
291         (*htab->del_f) (htab->entries[i]);
292
293   if (htab->free_f != NULL)
294     {
295       (*htab->free_f) (htab->entries);
296       (*htab->free_f) (htab);
297     }
298   else if (htab->free_with_arg_f != NULL)
299     {
300       (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);
301       (*htab->free_with_arg_f) (htab->alloc_arg, htab);
302     }
303 }
304
305 /* This function clears all entries in the given hash table.  */
306
307 void
308 htab_empty (htab)
309      htab_t htab;
310 {
311   int i;
312
313   if (htab->del_f)
314     for (i = htab->size - 1; i >= 0; i--)
315       if (htab->entries[i] != EMPTY_ENTRY
316           && htab->entries[i] != DELETED_ENTRY)
317         (*htab->del_f) (htab->entries[i]);
318
319   memset (htab->entries, 0, htab->size * sizeof (PTR));
320 }
321
322 /* Similar to htab_find_slot, but without several unwanted side effects:
323     - Does not call htab->eq_f when it finds an existing entry.
324     - Does not change the count of elements/searches/collisions in the
325       hash table.
326    This function also assumes there are no deleted entries in the table.
327    HASH is the hash value for the element to be inserted.  */
328
329 static PTR *
330 find_empty_slot_for_expand (htab, hash)
331      htab_t htab;
332      hashval_t hash;
333 {
334   size_t size = htab->size;
335   unsigned int index = hash % size;
336   PTR *slot = htab->entries + index;
337   hashval_t hash2;
338
339   if (*slot == EMPTY_ENTRY)
340     return slot;
341   else if (*slot == DELETED_ENTRY)
342     abort ();
343
344   hash2 = 1 + hash % (size - 2);
345   for (;;)
346     {
347       index += hash2;
348       if (index >= size)
349         index -= size;
350
351       slot = htab->entries + index;
352       if (*slot == EMPTY_ENTRY)
353         return slot;
354       else if (*slot == DELETED_ENTRY)
355         abort ();
356     }
357 }
358
359 /* The following function changes size of memory allocated for the
360    entries and repeatedly inserts the table elements.  The occupancy
361    of the table after the call will be about 50%.  Naturally the hash
362    table must already exist.  Remember also that the place of the
363    table entries is changed.  If memory allocation failures are allowed,
364    this function will return zero, indicating that the table could not be
365    expanded.  If all goes well, it will return a non-zero value.  */
366
367 static int
368 htab_expand (htab)
369      htab_t htab;
370 {
371   PTR *oentries;
372   PTR *olimit;
373   PTR *p;
374   PTR *nentries;
375   size_t nsize;
376
377   oentries = htab->entries;
378   olimit = oentries + htab->size;
379
380   /* Resize only when table after removal of unused elements is either
381      too full or too empty.  */
382   if ((htab->n_elements - htab->n_deleted) * 2 > htab->size
383       || ((htab->n_elements - htab->n_deleted) * 8 < htab->size
384           && htab->size > 32))
385     nsize = higher_prime_number ((htab->n_elements - htab->n_deleted) * 2);
386   else
387     nsize = htab->size;
388
389   if (htab->alloc_with_arg_f != NULL)
390     nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
391                                                   sizeof (PTR *));
392   else
393     nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
394   if (nentries == NULL)
395     return 0;
396   htab->entries = nentries;
397   htab->size = nsize;
398
399   htab->n_elements -= htab->n_deleted;
400   htab->n_deleted = 0;
401
402   p = oentries;
403   do
404     {
405       PTR x = *p;
406
407       if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
408         {
409           PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
410
411           *q = x;
412         }
413
414       p++;
415     }
416   while (p < olimit);
417
418   if (htab->free_f != NULL)
419     (*htab->free_f) (oentries);
420   else if (htab->free_with_arg_f != NULL)
421     (*htab->free_with_arg_f) (htab->alloc_arg, oentries);
422   return 1;
423 }
424
425 /* This function searches for a hash table entry equal to the given
426    element.  It cannot be used to insert or delete an element.  */
427
428 PTR
429 htab_find_with_hash (htab, element, hash)
430      htab_t htab;
431      const PTR element;
432      hashval_t hash;
433 {
434   unsigned int index;
435   hashval_t hash2;
436   size_t size;
437   PTR entry;
438
439   htab->searches++;
440   size = htab->size;
441   index = hash % size;
442
443   entry = htab->entries[index];
444   if (entry == EMPTY_ENTRY
445       || (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
446     return entry;
447
448   hash2 = 1 + hash % (size - 2);
449
450   for (;;)
451     {
452       htab->collisions++;
453       index += hash2;
454       if (index >= size)
455         index -= size;
456
457       entry = htab->entries[index];
458       if (entry == EMPTY_ENTRY
459           || (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
460         return entry;
461     }
462 }
463
464 /* Like htab_find_slot_with_hash, but compute the hash value from the
465    element.  */
466
467 PTR
468 htab_find (htab, element)
469      htab_t htab;
470      const PTR element;
471 {
472   return htab_find_with_hash (htab, element, (*htab->hash_f) (element));
473 }
474
475 /* This function searches for a hash table slot containing an entry
476    equal to the given element.  To delete an entry, call this with
477    INSERT = 0, then call htab_clear_slot on the slot returned (possibly
478    after doing some checks).  To insert an entry, call this with
479    INSERT = 1, then write the value you want into the returned slot.
480    When inserting an entry, NULL may be returned if memory allocation
481    fails.  */
482
483 PTR *
484 htab_find_slot_with_hash (htab, element, hash, insert)
485      htab_t htab;
486      const PTR element;
487      hashval_t hash;
488      enum insert_option insert;
489 {
490   PTR *first_deleted_slot;
491   unsigned int index;
492   hashval_t hash2;
493   size_t size;
494   PTR entry;
495
496   if (insert == INSERT && htab->size * 3 <= htab->n_elements * 4
497       && htab_expand (htab) == 0)
498     return NULL;
499
500   size = htab->size;
501   index = hash % size;
502
503   htab->searches++;
504   first_deleted_slot = NULL;
505
506   entry = htab->entries[index];
507   if (entry == EMPTY_ENTRY)
508     goto empty_entry;
509   else if (entry == DELETED_ENTRY)
510     first_deleted_slot = &htab->entries[index];
511   else if ((*htab->eq_f) (entry, element))
512     return &htab->entries[index];
513       
514   hash2 = 1 + hash % (size - 2);
515   for (;;)
516     {
517       htab->collisions++;
518       index += hash2;
519       if (index >= size)
520         index -= size;
521       
522       entry = htab->entries[index];
523       if (entry == EMPTY_ENTRY)
524         goto empty_entry;
525       else if (entry == DELETED_ENTRY)
526         {
527           if (!first_deleted_slot)
528             first_deleted_slot = &htab->entries[index];
529         }
530       else if ((*htab->eq_f) (entry, element))
531         return &htab->entries[index];
532     }
533
534  empty_entry:
535   if (insert == NO_INSERT)
536     return NULL;
537
538   if (first_deleted_slot)
539     {
540       htab->n_deleted--;
541       *first_deleted_slot = EMPTY_ENTRY;
542       return first_deleted_slot;
543     }
544
545   htab->n_elements++;
546   return &htab->entries[index];
547 }
548
549 /* Like htab_find_slot_with_hash, but compute the hash value from the
550    element.  */
551
552 PTR *
553 htab_find_slot (htab, element, insert)
554      htab_t htab;
555      const PTR element;
556      enum insert_option insert;
557 {
558   return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
559                                    insert);
560 }
561
562 /* This function deletes an element with the given value from hash
563    table.  If there is no matching element in the hash table, this
564    function does nothing.  */
565
566 void
567 htab_remove_elt (htab, element)
568      htab_t htab;
569      PTR element;
570 {
571   PTR *slot;
572
573   slot = htab_find_slot (htab, element, NO_INSERT);
574   if (*slot == EMPTY_ENTRY)
575     return;
576
577   if (htab->del_f)
578     (*htab->del_f) (*slot);
579
580   *slot = DELETED_ENTRY;
581   htab->n_deleted++;
582 }
583
584 /* This function clears a specified slot in a hash table.  It is
585    useful when you've already done the lookup and don't want to do it
586    again.  */
587
588 void
589 htab_clear_slot (htab, slot)
590      htab_t htab;
591      PTR *slot;
592 {
593   if (slot < htab->entries || slot >= htab->entries + htab->size
594       || *slot == EMPTY_ENTRY || *slot == DELETED_ENTRY)
595     abort ();
596
597   if (htab->del_f)
598     (*htab->del_f) (*slot);
599
600   *slot = DELETED_ENTRY;
601   htab->n_deleted++;
602 }
603
604 /* This function scans over the entire hash table calling
605    CALLBACK for each live entry.  If CALLBACK returns false,
606    the iteration stops.  INFO is passed as CALLBACK's second
607    argument.  */
608
609 void
610 htab_traverse_noresize (htab, callback, info)
611      htab_t htab;
612      htab_trav callback;
613      PTR info;
614 {
615   PTR *slot;
616   PTR *limit;
617
618   slot = htab->entries;
619   limit = slot + htab->size;
620
621   do
622     {
623       PTR x = *slot;
624
625       if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
626         if (!(*callback) (slot, info))
627           break;
628     }
629   while (++slot < limit);
630 }
631
632 /* Like htab_traverse_noresize, but does resize the table when it is
633    too empty to improve effectivity of subsequent calls.  */
634
635 void
636 htab_traverse (htab, callback, info)
637      htab_t htab;
638      htab_trav callback;
639      PTR info;
640 {
641   if ((htab->n_elements - htab->n_deleted) * 8 < htab->size)
642     htab_expand (htab);
643
644   htab_traverse_noresize (htab, callback, info);
645 }
646
647 /* Return the current size of given hash table. */
648
649 size_t
650 htab_size (htab)
651      htab_t htab;
652 {
653   return htab->size;
654 }
655
656 /* Return the current number of elements in given hash table. */
657
658 size_t
659 htab_elements (htab)
660      htab_t htab;
661 {
662   return htab->n_elements - htab->n_deleted;
663 }
664
665 /* Return the fraction of fixed collisions during all work with given
666    hash table. */
667
668 double
669 htab_collisions (htab)
670      htab_t htab;
671 {
672   if (htab->searches == 0)
673     return 0.0;
674
675   return (double) htab->collisions / (double) htab->searches;
676 }
677
678 /* Hash P as a null-terminated string.
679
680    Copied from gcc/hashtable.c.  Zack had the following to say with respect
681    to applicability, though note that unlike hashtable.c, this hash table
682    implementation re-hashes rather than chain buckets.
683
684    http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html
685    From: Zack Weinberg <zackw@panix.com>
686    Date: Fri, 17 Aug 2001 02:15:56 -0400
687
688    I got it by extracting all the identifiers from all the source code
689    I had lying around in mid-1999, and testing many recurrences of
690    the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either
691    prime numbers or the appropriate identity.  This was the best one.
692    I don't remember exactly what constituted "best", except I was
693    looking at bucket-length distributions mostly.
694    
695    So it should be very good at hashing identifiers, but might not be
696    as good at arbitrary strings.
697    
698    I'll add that it thoroughly trounces the hash functions recommended
699    for this use at http://burtleburtle.net/bob/hash/index.html, both
700    on speed and bucket distribution.  I haven't tried it against the
701    function they just started using for Perl's hashes.  */
702
703 hashval_t
704 htab_hash_string (p)
705      const PTR p;
706 {
707   const unsigned char *str = (const unsigned char *) p;
708   hashval_t r = 0;
709   unsigned char c;
710
711   while ((c = *str++) != 0)
712     r = r * 67 + c - 113;
713
714   return r;
715 }
716
717 /* DERIVED FROM:
718 --------------------------------------------------------------------
719 lookup2.c, by Bob Jenkins, December 1996, Public Domain.
720 hash(), hash2(), hash3, and mix() are externally useful functions.
721 Routines to test the hash are included if SELF_TEST is defined.
722 You can use this free for any purpose.  It has no warranty.
723 --------------------------------------------------------------------
724 */
725
726 /*
727 --------------------------------------------------------------------
728 mix -- mix 3 32-bit values reversibly.
729 For every delta with one or two bit set, and the deltas of all three
730   high bits or all three low bits, whether the original value of a,b,c
731   is almost all zero or is uniformly distributed,
732 * If mix() is run forward or backward, at least 32 bits in a,b,c
733   have at least 1/4 probability of changing.
734 * If mix() is run forward, every bit of c will change between 1/3 and
735   2/3 of the time.  (Well, 22/100 and 78/100 for some 2-bit deltas.)
736 mix() was built out of 36 single-cycle latency instructions in a 
737   structure that could supported 2x parallelism, like so:
738       a -= b; 
739       a -= c; x = (c>>13);
740       b -= c; a ^= x;
741       b -= a; x = (a<<8);
742       c -= a; b ^= x;
743       c -= b; x = (b>>13);
744       ...
745   Unfortunately, superscalar Pentiums and Sparcs can't take advantage 
746   of that parallelism.  They've also turned some of those single-cycle
747   latency instructions into multi-cycle latency instructions.  Still,
748   this is the fastest good hash I could find.  There were about 2^^68
749   to choose from.  I only looked at a billion or so.
750 --------------------------------------------------------------------
751 */
752 /* same, but slower, works on systems that might have 8 byte hashval_t's */
753 #define mix(a,b,c) \
754 { \
755   a -= b; a -= c; a ^= (c>>13); \
756   b -= c; b -= a; b ^= (a<< 8); \
757   c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
758   a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
759   b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
760   c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
761   a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
762   b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
763   c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
764 }
765
766 /*
767 --------------------------------------------------------------------
768 hash() -- hash a variable-length key into a 32-bit value
769   k     : the key (the unaligned variable-length array of bytes)
770   len   : the length of the key, counting by bytes
771   level : can be any 4-byte value
772 Returns a 32-bit value.  Every bit of the key affects every bit of
773 the return value.  Every 1-bit and 2-bit delta achieves avalanche.
774 About 36+6len instructions.
775
776 The best hash table sizes are powers of 2.  There is no need to do
777 mod a prime (mod is sooo slow!).  If you need less than 32 bits,
778 use a bitmask.  For example, if you need only 10 bits, do
779   h = (h & hashmask(10));
780 In which case, the hash table should have hashsize(10) elements.
781
782 If you are hashing n strings (ub1 **)k, do it like this:
783   for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);
784
785 By Bob Jenkins, 1996.  bob_jenkins@burtleburtle.net.  You may use this
786 code any way you wish, private, educational, or commercial.  It's free.
787
788 See http://burtleburtle.net/bob/hash/evahash.html
789 Use for hash table lookup, or anything where one collision in 2^32 is
790 acceptable.  Do NOT use for cryptographic purposes.
791 --------------------------------------------------------------------
792 */
793
794 hashval_t iterative_hash (k_in, length, initval)
795      const PTR k_in;               /* the key */
796      register size_t  length;      /* the length of the key */
797      register hashval_t  initval;  /* the previous hash, or an arbitrary value */
798 {
799   register const unsigned char *k = (const unsigned char *)k_in;
800   register hashval_t a,b,c,len;
801
802   /* Set up the internal state */
803   len = length;
804   a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
805   c = initval;           /* the previous hash value */
806
807   /*---------------------------------------- handle most of the key */
808 #ifndef WORDS_BIGENDIAN
809   /* On a little-endian machine, if the data is 4-byte aligned we can hash
810      by word for better speed.  This gives nondeterministic results on
811      big-endian machines.  */
812   if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0)
813     while (len >= 12)    /* aligned */
814       {
815         a += *(hashval_t *)(k+0);
816         b += *(hashval_t *)(k+4);
817         c += *(hashval_t *)(k+8);
818         mix(a,b,c);
819         k += 12; len -= 12;
820       }
821   else /* unaligned */
822 #endif
823     while (len >= 12)
824       {
825         a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24));
826         b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24));
827         c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24));
828         mix(a,b,c);
829         k += 12; len -= 12;
830       }
831
832   /*------------------------------------- handle the last 11 bytes */
833   c += length;
834   switch(len)              /* all the case statements fall through */
835     {
836     case 11: c+=((hashval_t)k[10]<<24);
837     case 10: c+=((hashval_t)k[9]<<16);
838     case 9 : c+=((hashval_t)k[8]<<8);
839       /* the first byte of c is reserved for the length */
840     case 8 : b+=((hashval_t)k[7]<<24);
841     case 7 : b+=((hashval_t)k[6]<<16);
842     case 6 : b+=((hashval_t)k[5]<<8);
843     case 5 : b+=k[4];
844     case 4 : a+=((hashval_t)k[3]<<24);
845     case 3 : a+=((hashval_t)k[2]<<16);
846     case 2 : a+=((hashval_t)k[1]<<8);
847     case 1 : a+=k[0];
848       /* case 0: nothing left to add */
849     }
850   mix(a,b,c);
851   /*-------------------------------------------- report the result */
852   return c;
853 }