Click to return to the uthash home page.
Special thanks to Alfred Heisner for contributing several enhancements:
Support for two new hash functions:
the Paul Hsieh hash function (HASH_SFH)
Austin Appleby’s MurmurHash function (HASH_MUR)
Because of its excellent performance, MurmurHash is now the default hash function.
keystats now has much better elapsed time accuracy under Cygwin and MinGW
fixed casting in HASH_FNV, HASH_SAX and HASH_OAT for non-char keys
This release also includes:
a new HASH_CLEAR operation clears a hash table in one step.
a new HASH_SELECT operation inserts those elements from one hash that satisfy a given condition into another hash. The selected items have dual presence in both hash tables. For example a game could select the visible polygons from a hash of all polygons.
fixed a compile-time error which occurred if the final argument to HASH_ADD_KEYPTR was a pointer to an array member like &a[i]
added another test script tests/all_funcs which executes the test suite using every supported hash function
And lastly,
a new, separate header called utlist.h is included which provides linked list macros for C structures, similar in style to the uthash macros
now thread-safe for concurrent readers
use scratch variables on stack rather than in table (thanks, Petter Arvidsson!). This change made HASH_FIND about 13% faster and enabled reader concurrency.
made BSD license terms even more permissive
added PDF version of User Guide
added update news
Add HASH_COUNT for counting items in the hash
Compatibility with C++. Satisfy additional casting requirements. Also in the tests/ directory, running make cplusplus now compiles all the test programs with the C++ compiler.
Eliminate elmt pointer from the UT_hash_handle. Calculate elmt from hash handle address by subtracting hho (hash handle offset).
Contributed by L.S.Chin: Cast void* to char* before pointer arithmetic to suppress compiler warnings. We assume compilers abide to C standards which impose requirement that sizeof(void*) == sizeof(char*).
Return meaningful exit status from do_tests per Tiago Cunha, so that package manager-based install can verify tests are successful
use integer-only math-- no floating point! Support FPU-less CPU’s.
eliminate hash_q metric, which measured the fraction of items with non-ideal chain positions. We only need to know if this fraction is below 0.5. This is now determined using fast bitwise tests.
when an item is added to the hash, calculate the key’s hash value upfront and store it, instead of recomputing it as needed. This hashv is stored in the hash handle. Potentially major speed benefit for bucket expansion algorithm. Deleting is marginally improved too.
fixed a minor bug in the calculation of the max ideal chain length; line 446 in v1.2 erroneously calculated a/b*2 instead of a/(b*2). The effect of this bug was that bucket expansion could occur more readily because the per-bucket max chain length multiplier factor (which delays bucket expansion when certain buckets are overused) was set to a lower, expansion-favoring value than intended.
improved source commenting and improved variable names in structures
remove HASH_JSW. Lengthy random number array made code less readable
add HASH_SRT(hh,hash,cmp) as a generalized HASH_SORT(hash,cmp). It was an omission in uthash 1.2 that there was no sort macro for hash handles with names other than hh.
Corrected HASH_FSCK so it works with any name for the hash handle.
behave properly in pathological HASH_DEL(a,a) case where the same variable references the head and the deletee (advancing the head then loses the correct reference to the deletee); fix by using scratch area in the hash table to store deletee hash handle.
made tests runnable on MinGW
3000+ downloads since uthash-1.0
new HASH_SORT macro
Cygwin support
User Guide now features a clickable Table of Contents. (The technique for generating the TOC on the browser was contributed back to the AsciiDoc project and incorporated into AsciiDoc v8.1.0).
uthash-1.1 released
supports several built-in user-selectable hash functions
new keystats utility quantifies performance of hash functions
Initial release