This time the version of the patch that works.
[binutils.git] / libiberty / hashtab.c
blobf7751664f04fd8e83e5db54bf1b05c4d49ac2162
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).
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.
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.
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. */
21 /* This package implements basic hash table functionality. It is possible
22 to search for an entry, create an entry and destroy an entry.
24 Elements in the table are generic pointers.
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.
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. */
34 #ifdef HAVE_CONFIG_H
35 #include "config.h"
36 #endif
38 #include <sys/types.h>
40 #ifdef HAVE_STDLIB_H
41 #include <stdlib.h>
42 #endif
44 #ifdef HAVE_STRING_H
45 #include <string.h>
46 #endif
48 #ifdef HAVE_MALLOC_H
49 #include <malloc.h>
50 #endif
52 #include <stdio.h>
54 #include "libiberty.h"
55 #include "hashtab.h"
57 /* This macro defines reserved value for empty table entry. */
59 #define EMPTY_ENTRY ((PTR) 0)
61 /* This macro defines reserved value for table entry which contained
62 a deleted element. */
64 #define DELETED_ENTRY ((PTR) 1)
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));
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;
78 /* The following function returns a nearest prime number which is
79 greater than N, and near a power of two. */
81 static unsigned long
82 higher_prime_number (n)
83 unsigned long n;
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),
121 const unsigned long *low = &primes[0];
122 const unsigned long *high = &primes[sizeof(primes) / sizeof(primes[0])];
124 while (low != high)
126 const unsigned long *mid = low + (high - low) / 2;
127 if (n > *mid)
128 low = mid + 1;
129 else
130 high = mid;
133 /* If we've run out of primes, abort. */
134 if (n > *low)
136 fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
137 abort ();
140 return *low;
143 /* Returns a hash code for P. */
145 static hashval_t
146 hash_pointer (p)
147 const PTR p;
149 return (hashval_t) ((long)p >> 3);
152 /* Returns non-zero if P1 and P2 are equal. */
154 static int
155 eq_pointer (p1, p2)
156 const PTR p1;
157 const PTR p2;
159 return p1 == p2;
162 /* Return the current size of given hash table. */
164 inline size_t
165 htab_size (htab)
166 htab_t htab;
168 return htab->size;
171 /* Return the current number of elements in given hash table. */
173 inline size_t
174 htab_elements (htab)
175 htab_t htab;
177 return htab->n_elements - htab->n_deleted;
180 /* Compute the primary hash for HASH given HTAB's current size. */
182 static inline hashval_t
183 htab_mod (hash, htab)
184 hashval_t hash;
185 htab_t htab;
187 return hash % htab_size (htab);
190 /* Compute the secondary hash for HASH given HTAB's current size. */
192 static inline hashval_t
193 htab_mod_m2 (hash, htab)
194 hashval_t hash;
195 htab_t htab;
197 return 1 + hash % (htab_size (htab) - 2);
200 /* This function creates table with length slightly longer than given
201 source length. Created hash table is initiated as empty (all the
202 hash table entries are EMPTY_ENTRY). The function returns the
203 created hash table, or NULL if memory allocation fails. */
205 htab_t
206 htab_create_alloc (size, hash_f, eq_f, del_f, alloc_f, free_f)
207 size_t size;
208 htab_hash hash_f;
209 htab_eq eq_f;
210 htab_del del_f;
211 htab_alloc alloc_f;
212 htab_free free_f;
214 htab_t result;
216 size = higher_prime_number (size);
217 result = (htab_t) (*alloc_f) (1, sizeof (struct htab));
218 if (result == NULL)
219 return NULL;
220 result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR));
221 if (result->entries == NULL)
223 if (free_f != NULL)
224 (*free_f) (result);
225 return NULL;
227 result->size = size;
228 result->hash_f = hash_f;
229 result->eq_f = eq_f;
230 result->del_f = del_f;
231 result->alloc_f = alloc_f;
232 result->free_f = free_f;
233 return result;
236 /* As above, but use the variants of alloc_f and free_f which accept
237 an extra argument. */
239 htab_t
240 htab_create_alloc_ex (size, hash_f, eq_f, del_f, alloc_arg, alloc_f,
241 free_f)
242 size_t size;
243 htab_hash hash_f;
244 htab_eq eq_f;
245 htab_del del_f;
246 PTR alloc_arg;
247 htab_alloc_with_arg alloc_f;
248 htab_free_with_arg free_f;
250 htab_t result;
252 size = higher_prime_number (size);
253 result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
254 if (result == NULL)
255 return NULL;
256 result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR));
257 if (result->entries == NULL)
259 if (free_f != NULL)
260 (*free_f) (alloc_arg, result);
261 return NULL;
263 result->size = size;
264 result->hash_f = hash_f;
265 result->eq_f = eq_f;
266 result->del_f = del_f;
267 result->alloc_arg = alloc_arg;
268 result->alloc_with_arg_f = alloc_f;
269 result->free_with_arg_f = free_f;
270 return result;
273 /* Update the function pointers and allocation parameter in the htab_t. */
275 void
276 htab_set_functions_ex (htab, hash_f, eq_f, del_f, alloc_arg, alloc_f, free_f)
277 htab_t htab;
278 htab_hash hash_f;
279 htab_eq eq_f;
280 htab_del del_f;
281 PTR alloc_arg;
282 htab_alloc_with_arg alloc_f;
283 htab_free_with_arg free_f;
285 htab->hash_f = hash_f;
286 htab->eq_f = eq_f;
287 htab->del_f = del_f;
288 htab->alloc_arg = alloc_arg;
289 htab->alloc_with_arg_f = alloc_f;
290 htab->free_with_arg_f = free_f;
293 /* These functions exist solely for backward compatibility. */
295 #undef htab_create
296 htab_t
297 htab_create (size, hash_f, eq_f, del_f)
298 size_t size;
299 htab_hash hash_f;
300 htab_eq eq_f;
301 htab_del del_f;
303 return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);
306 htab_t
307 htab_try_create (size, hash_f, eq_f, del_f)
308 size_t size;
309 htab_hash hash_f;
310 htab_eq eq_f;
311 htab_del del_f;
313 return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);
316 /* This function frees all memory allocated for given hash table.
317 Naturally the hash table must already exist. */
319 void
320 htab_delete (htab)
321 htab_t htab;
323 size_t size = htab_size (htab);
324 PTR *entries = htab->entries;
325 int i;
327 if (htab->del_f)
328 for (i = size - 1; i >= 0; i--)
329 if (entries[i] != EMPTY_ENTRY && entries[i] != DELETED_ENTRY)
330 (*htab->del_f) (entries[i]);
332 if (htab->free_f != NULL)
334 (*htab->free_f) (entries);
335 (*htab->free_f) (htab);
337 else if (htab->free_with_arg_f != NULL)
339 (*htab->free_with_arg_f) (htab->alloc_arg, entries);
340 (*htab->free_with_arg_f) (htab->alloc_arg, htab);
344 /* This function clears all entries in the given hash table. */
346 void
347 htab_empty (htab)
348 htab_t htab;
350 size_t size = htab_size (htab);
351 PTR *entries = htab->entries;
352 int i;
354 if (htab->del_f)
355 for (i = size - 1; i >= 0; i--)
356 if (entries[i] != EMPTY_ENTRY && entries[i] != DELETED_ENTRY)
357 (*htab->del_f) (entries[i]);
359 memset (entries, 0, size * sizeof (PTR));
362 /* Similar to htab_find_slot, but without several unwanted side effects:
363 - Does not call htab->eq_f when it finds an existing entry.
364 - Does not change the count of elements/searches/collisions in the
365 hash table.
366 This function also assumes there are no deleted entries in the table.
367 HASH is the hash value for the element to be inserted. */
369 static PTR *
370 find_empty_slot_for_expand (htab, hash)
371 htab_t htab;
372 hashval_t hash;
374 hashval_t index = htab_mod (hash, htab);
375 size_t size = htab_size (htab);
376 PTR *slot = htab->entries + index;
377 hashval_t hash2;
379 if (*slot == EMPTY_ENTRY)
380 return slot;
381 else if (*slot == DELETED_ENTRY)
382 abort ();
384 hash2 = htab_mod_m2 (hash, htab);
385 for (;;)
387 index += hash2;
388 if (index >= size)
389 index -= size;
391 slot = htab->entries + index;
392 if (*slot == EMPTY_ENTRY)
393 return slot;
394 else if (*slot == DELETED_ENTRY)
395 abort ();
399 /* The following function changes size of memory allocated for the
400 entries and repeatedly inserts the table elements. The occupancy
401 of the table after the call will be about 50%. Naturally the hash
402 table must already exist. Remember also that the place of the
403 table entries is changed. If memory allocation failures are allowed,
404 this function will return zero, indicating that the table could not be
405 expanded. If all goes well, it will return a non-zero value. */
407 static int
408 htab_expand (htab)
409 htab_t htab;
411 PTR *oentries;
412 PTR *olimit;
413 PTR *p;
414 PTR *nentries;
415 size_t nsize;
417 oentries = htab->entries;
418 olimit = oentries + htab->size;
420 /* Resize only when table after removal of unused elements is either
421 too full or too empty. */
422 if ((htab->n_elements - htab->n_deleted) * 2 > htab->size
423 || ((htab->n_elements - htab->n_deleted) * 8 < htab->size
424 && htab->size > 32))
425 nsize = higher_prime_number ((htab->n_elements - htab->n_deleted) * 2);
426 else
427 nsize = htab->size;
429 if (htab->alloc_with_arg_f != NULL)
430 nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
431 sizeof (PTR *));
432 else
433 nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
434 if (nentries == NULL)
435 return 0;
436 htab->entries = nentries;
437 htab->size = nsize;
439 htab->n_elements -= htab->n_deleted;
440 htab->n_deleted = 0;
442 p = oentries;
445 PTR x = *p;
447 if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
449 PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
451 *q = x;
454 p++;
456 while (p < olimit);
458 if (htab->free_f != NULL)
459 (*htab->free_f) (oentries);
460 else if (htab->free_with_arg_f != NULL)
461 (*htab->free_with_arg_f) (htab->alloc_arg, oentries);
462 return 1;
465 /* This function searches for a hash table entry equal to the given
466 element. It cannot be used to insert or delete an element. */
469 htab_find_with_hash (htab, element, hash)
470 htab_t htab;
471 const PTR element;
472 hashval_t hash;
474 hashval_t index, hash2;
475 size_t size;
476 PTR entry;
478 htab->searches++;
479 size = htab_size (htab);
480 index = htab_mod (hash, htab);
482 entry = htab->entries[index];
483 if (entry == EMPTY_ENTRY
484 || (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
485 return entry;
487 hash2 = htab_mod_m2 (hash, htab);
488 for (;;)
490 htab->collisions++;
491 index += hash2;
492 if (index >= size)
493 index -= size;
495 entry = htab->entries[index];
496 if (entry == EMPTY_ENTRY
497 || (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
498 return entry;
502 /* Like htab_find_slot_with_hash, but compute the hash value from the
503 element. */
506 htab_find (htab, element)
507 htab_t htab;
508 const PTR element;
510 return htab_find_with_hash (htab, element, (*htab->hash_f) (element));
513 /* This function searches for a hash table slot containing an entry
514 equal to the given element. To delete an entry, call this with
515 INSERT = 0, then call htab_clear_slot on the slot returned (possibly
516 after doing some checks). To insert an entry, call this with
517 INSERT = 1, then write the value you want into the returned slot.
518 When inserting an entry, NULL may be returned if memory allocation
519 fails. */
521 PTR *
522 htab_find_slot_with_hash (htab, element, hash, insert)
523 htab_t htab;
524 const PTR element;
525 hashval_t hash;
526 enum insert_option insert;
528 PTR *first_deleted_slot;
529 hashval_t index, hash2;
530 size_t size;
531 PTR entry;
533 size = htab_size (htab);
534 if (insert == INSERT && size * 3 <= htab->n_elements * 4)
536 if (htab_expand (htab) == 0)
537 return NULL;
538 size = htab_size (htab);
541 index = htab_mod (hash, htab);
543 htab->searches++;
544 first_deleted_slot = NULL;
546 entry = htab->entries[index];
547 if (entry == EMPTY_ENTRY)
548 goto empty_entry;
549 else if (entry == DELETED_ENTRY)
550 first_deleted_slot = &htab->entries[index];
551 else if ((*htab->eq_f) (entry, element))
552 return &htab->entries[index];
554 hash2 = htab_mod_m2 (hash, htab);
555 for (;;)
557 htab->collisions++;
558 index += hash2;
559 if (index >= size)
560 index -= size;
562 entry = htab->entries[index];
563 if (entry == EMPTY_ENTRY)
564 goto empty_entry;
565 else if (entry == DELETED_ENTRY)
567 if (!first_deleted_slot)
568 first_deleted_slot = &htab->entries[index];
570 else if ((*htab->eq_f) (entry, element))
571 return &htab->entries[index];
574 empty_entry:
575 if (insert == NO_INSERT)
576 return NULL;
578 if (first_deleted_slot)
580 htab->n_deleted--;
581 *first_deleted_slot = EMPTY_ENTRY;
582 return first_deleted_slot;
585 htab->n_elements++;
586 return &htab->entries[index];
589 /* Like htab_find_slot_with_hash, but compute the hash value from the
590 element. */
592 PTR *
593 htab_find_slot (htab, element, insert)
594 htab_t htab;
595 const PTR element;
596 enum insert_option insert;
598 return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
599 insert);
602 /* This function deletes an element with the given value from hash
603 table. If there is no matching element in the hash table, this
604 function does nothing. */
606 void
607 htab_remove_elt (htab, element)
608 htab_t htab;
609 PTR element;
611 PTR *slot;
613 slot = htab_find_slot (htab, element, NO_INSERT);
614 if (*slot == EMPTY_ENTRY)
615 return;
617 if (htab->del_f)
618 (*htab->del_f) (*slot);
620 *slot = DELETED_ENTRY;
621 htab->n_deleted++;
624 /* This function clears a specified slot in a hash table. It is
625 useful when you've already done the lookup and don't want to do it
626 again. */
628 void
629 htab_clear_slot (htab, slot)
630 htab_t htab;
631 PTR *slot;
633 if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
634 || *slot == EMPTY_ENTRY || *slot == DELETED_ENTRY)
635 abort ();
637 if (htab->del_f)
638 (*htab->del_f) (*slot);
640 *slot = DELETED_ENTRY;
641 htab->n_deleted++;
644 /* This function scans over the entire hash table calling
645 CALLBACK for each live entry. If CALLBACK returns false,
646 the iteration stops. INFO is passed as CALLBACK's second
647 argument. */
649 void
650 htab_traverse_noresize (htab, callback, info)
651 htab_t htab;
652 htab_trav callback;
653 PTR info;
655 PTR *slot;
656 PTR *limit;
658 slot = htab->entries;
659 limit = slot + htab_size (htab);
663 PTR x = *slot;
665 if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
666 if (!(*callback) (slot, info))
667 break;
669 while (++slot < limit);
672 /* Like htab_traverse_noresize, but does resize the table when it is
673 too empty to improve effectivity of subsequent calls. */
675 void
676 htab_traverse (htab, callback, info)
677 htab_t htab;
678 htab_trav callback;
679 PTR info;
681 if (htab_elements (htab) * 8 < htab_size (htab))
682 htab_expand (htab);
684 htab_traverse_noresize (htab, callback, info);
687 /* Return the fraction of fixed collisions during all work with given
688 hash table. */
690 double
691 htab_collisions (htab)
692 htab_t htab;
694 if (htab->searches == 0)
695 return 0.0;
697 return (double) htab->collisions / (double) htab->searches;
700 /* Hash P as a null-terminated string.
702 Copied from gcc/hashtable.c. Zack had the following to say with respect
703 to applicability, though note that unlike hashtable.c, this hash table
704 implementation re-hashes rather than chain buckets.
706 http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html
707 From: Zack Weinberg <zackw@panix.com>
708 Date: Fri, 17 Aug 2001 02:15:56 -0400
710 I got it by extracting all the identifiers from all the source code
711 I had lying around in mid-1999, and testing many recurrences of
712 the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either
713 prime numbers or the appropriate identity. This was the best one.
714 I don't remember exactly what constituted "best", except I was
715 looking at bucket-length distributions mostly.
717 So it should be very good at hashing identifiers, but might not be
718 as good at arbitrary strings.
720 I'll add that it thoroughly trounces the hash functions recommended
721 for this use at http://burtleburtle.net/bob/hash/index.html, both
722 on speed and bucket distribution. I haven't tried it against the
723 function they just started using for Perl's hashes. */
725 hashval_t
726 htab_hash_string (p)
727 const PTR p;
729 const unsigned char *str = (const unsigned char *) p;
730 hashval_t r = 0;
731 unsigned char c;
733 while ((c = *str++) != 0)
734 r = r * 67 + c - 113;
736 return r;
739 /* DERIVED FROM:
740 --------------------------------------------------------------------
741 lookup2.c, by Bob Jenkins, December 1996, Public Domain.
742 hash(), hash2(), hash3, and mix() are externally useful functions.
743 Routines to test the hash are included if SELF_TEST is defined.
744 You can use this free for any purpose. It has no warranty.
745 --------------------------------------------------------------------
749 --------------------------------------------------------------------
750 mix -- mix 3 32-bit values reversibly.
751 For every delta with one or two bit set, and the deltas of all three
752 high bits or all three low bits, whether the original value of a,b,c
753 is almost all zero or is uniformly distributed,
754 * If mix() is run forward or backward, at least 32 bits in a,b,c
755 have at least 1/4 probability of changing.
756 * If mix() is run forward, every bit of c will change between 1/3 and
757 2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.)
758 mix() was built out of 36 single-cycle latency instructions in a
759 structure that could supported 2x parallelism, like so:
760 a -= b;
761 a -= c; x = (c>>13);
762 b -= c; a ^= x;
763 b -= a; x = (a<<8);
764 c -= a; b ^= x;
765 c -= b; x = (b>>13);
767 Unfortunately, superscalar Pentiums and Sparcs can't take advantage
768 of that parallelism. They've also turned some of those single-cycle
769 latency instructions into multi-cycle latency instructions. Still,
770 this is the fastest good hash I could find. There were about 2^^68
771 to choose from. I only looked at a billion or so.
772 --------------------------------------------------------------------
774 /* same, but slower, works on systems that might have 8 byte hashval_t's */
775 #define mix(a,b,c) \
777 a -= b; a -= c; a ^= (c>>13); \
778 b -= c; b -= a; b ^= (a<< 8); \
779 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
780 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
781 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
782 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
783 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
784 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
785 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
789 --------------------------------------------------------------------
790 hash() -- hash a variable-length key into a 32-bit value
791 k : the key (the unaligned variable-length array of bytes)
792 len : the length of the key, counting by bytes
793 level : can be any 4-byte value
794 Returns a 32-bit value. Every bit of the key affects every bit of
795 the return value. Every 1-bit and 2-bit delta achieves avalanche.
796 About 36+6len instructions.
798 The best hash table sizes are powers of 2. There is no need to do
799 mod a prime (mod is sooo slow!). If you need less than 32 bits,
800 use a bitmask. For example, if you need only 10 bits, do
801 h = (h & hashmask(10));
802 In which case, the hash table should have hashsize(10) elements.
804 If you are hashing n strings (ub1 **)k, do it like this:
805 for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);
807 By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this
808 code any way you wish, private, educational, or commercial. It's free.
810 See http://burtleburtle.net/bob/hash/evahash.html
811 Use for hash table lookup, or anything where one collision in 2^32 is
812 acceptable. Do NOT use for cryptographic purposes.
813 --------------------------------------------------------------------
816 hashval_t iterative_hash (k_in, length, initval)
817 const PTR k_in; /* the key */
818 register size_t length; /* the length of the key */
819 register hashval_t initval; /* the previous hash, or an arbitrary value */
821 register const unsigned char *k = (const unsigned char *)k_in;
822 register hashval_t a,b,c,len;
824 /* Set up the internal state */
825 len = length;
826 a = b = 0x9e3779b9; /* the golden ratio; an arbitrary value */
827 c = initval; /* the previous hash value */
829 /*---------------------------------------- handle most of the key */
830 #ifndef WORDS_BIGENDIAN
831 /* On a little-endian machine, if the data is 4-byte aligned we can hash
832 by word for better speed. This gives nondeterministic results on
833 big-endian machines. */
834 if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0)
835 while (len >= 12) /* aligned */
837 a += *(hashval_t *)(k+0);
838 b += *(hashval_t *)(k+4);
839 c += *(hashval_t *)(k+8);
840 mix(a,b,c);
841 k += 12; len -= 12;
843 else /* unaligned */
844 #endif
845 while (len >= 12)
847 a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24));
848 b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24));
849 c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24));
850 mix(a,b,c);
851 k += 12; len -= 12;
854 /*------------------------------------- handle the last 11 bytes */
855 c += length;
856 switch(len) /* all the case statements fall through */
858 case 11: c+=((hashval_t)k[10]<<24);
859 case 10: c+=((hashval_t)k[9]<<16);
860 case 9 : c+=((hashval_t)k[8]<<8);
861 /* the first byte of c is reserved for the length */
862 case 8 : b+=((hashval_t)k[7]<<24);
863 case 7 : b+=((hashval_t)k[6]<<16);
864 case 6 : b+=((hashval_t)k[5]<<8);
865 case 5 : b+=k[4];
866 case 4 : a+=((hashval_t)k[3]<<24);
867 case 3 : a+=((hashval_t)k[2]<<16);
868 case 2 : a+=((hashval_t)k[1]<<8);
869 case 1 : a+=k[0];
870 /* case 0: nothing left to add */
872 mix(a,b,c);
873 /*-------------------------------------------- report the result */
874 return c;