Version 1.9.8 (2013-03-10)
-
HASH_REPLACE
now in uthash (thanks, Nick Vatamaniuc!) -
fixed clang warnings (thanks wynnw!)
-
transitioned to GitHub
-
uthash has been downloaded 29,000+ times since 2006 on SourceForge
Click to return to the uthash home page.
Version 1.9.7 (2012-10-09)
-
utstring now supports substring search using
utstring_find
(thanks, Joe Wei!) -
utlist now supports element prepend and replace (thanks, Zoltán Lajos Kis!)
-
utlist element prev/next fields can now have any names (thanks, Pawel S. Veselov!)
-
uthash cast quiets a clang warning (thanks, Roman Divacky and Baptiste Daroussin!)
-
uthash userguide example shows how to check key uniqueness (thanks, Richard Cook!)
-
uthash HASH_MUR compiles under MSVC++ 10 in C mode (thanks, Arun Kirthi Cherian!)
-
utstring_printf
now supports format checking (thanks, Donald Carr!)
Version 1.9.6 (2012-04-28)
-
add utarray_prev (thanks, Ben Hiett!)
-
add parens/casts for greater compatibility (thanks, Atis, Debasis Ganguly, and Steve McClellan!)
-
added ifndef to uthash_malloc and related hooks (thanks, Holger Machens!)
-
edit examples so they do not leak memory (thanks, 任晶磊!)
Version 1.9.5 (2011-11-16)
-
added
utarray_renew
-
fixed memory leak in
uthash_clear
when using Bloom filter (thanks, Jan Hättig!) -
utarray now copies the UT_icd on array creation rather than storing a pointer
-
add parentheses to
HASH_ADD
to fix preprocessing of certain arguments (thanks, Aaron Rosen!) -
more parenthesizations for greater macro argument flexibility
Version 1.9.4 (2011-06-05)
-
uthash now supports MurmurHash v3
-
utlist now includes concatenation macros (
LL_CONCAT
andDL_CONCAT
) -
utarray now supports binary search (
utarray_find
) -
utstring now supports a new-or-clear-existing macro (
utstring_renew
) -
documented technique for a multi-level hash table
-
clarified scope requirements for
UT_icd
in the utarray documentation -
fixed termination when
utstring_clear
is followed byutstring_body
-
fixed utarray_inserta macro when used with complex arguments
-
on Visual Studio define missing type
uint8_t
-
Debian/Ubuntu include uthash in the package
uthash-dev
. -
uthash has been downloaded 16,211 times.
Thanks to Yu Feng, Richard Cook, Dino Ciuffetti, Chris Groer, and Arun Cherian for feedback and fixes in this release!
Version 1.9.3 (2010-10-31)
-
fix an
ifdef
for compatibility with Intel compiler (thanks, degski!) -
fix
HASH_ITER
macro to satisfy C++ casting rules (thanks, Erik Bai!)
Version 1.9.2 (2010-10-04)
-
new
HASH_ITER
macro for more convenient deletion-safe iteration -
hashscan
can now run on FreeBSD 8.1 and later (thanks, Markus Gebert!) -
More parens to evaluate complex macro arguments properly (thanks, ngg!)
-
Add sz parameter to the
uthash_free
hook for platforms that do their own memory management. Hopefully this minor API change doesn’t cause too much breakage for people. (thanks, Niall Douglas!) -
uthash has been downloaded 12,294 times
Version 1.9.1 (2010-05-15)
-
Fix a redefinition warning when using
uthash.h
andutstring.h
together -
Fix a bug in
utstring_init
-
Added
HASH_FIND_PTR
andHASH_ADD_PTR
(thanks, Niall Douglas!)
Version 1.9 (2010-03-31)
-
uthash now supports Visual Studio 2008 and 2010 in C or C++ code!
-
new headers utarray.h and utstring.h are now included. These implement dynamic arrays and strings using macros
-
utlist.h now has deletion-safe iterators and search macros
-
the test suite now runs under Visual Studio (thanks again degski!)
-
special thanks for suggesting utarray and utlist features to Charalampos P.!
-
uthash has been downloaded 9,616 times
Version 1.8 (2009-09-08)
-
Added the
hashscan
utility that can report on the size and quality of hash tables in a running process (Linux-only) -
Added Bloom filter support. This has the potential to speed up certain types of programs that look up non-existant keys in sufficient numbers.
-
Restored the MurmurHash, which can once again be used, if an additional symbol is defined. This is a "safety" by which the user declares they understand that
-fno-strict-aliasing
flag must be used if they are using MurmurHash under gcc with optimization. -
Unified the bucket/table malloc hooks; now there is only one malloc hook
-
Re-organized the manual into a main section and advanced topics section
-
Fixed a bug in
utlist.h
where sorting a singly-linked list threw a compile-time error. -
Fixed a bug in
utlist.h
where a doubly-linked list that is sorted did not maintain the specialhead->prev
pointer back to the list tail.
Version 1.7 (2009-06-11)
-
The MurmurHash has been removed, and Jenkin’s hash is once again the default. While MurmurHash performed well, it’s unsafe with regard to the strict aliasing rule. This results in incorrect code when compiled with optimization. It’s not possible to enable
-fno-strict-aliasing
from within a header file. -
The linked list macros in
utlist.h
now comply with the strict-aliasing rule so they generate correct code under high optimization levels (O2 or O3). The use of the__typeof__
extension, which was originally a GNU extension, may reduce portability to other compilers that do not support this extension. This extension is used in the singly-linked list macros and the sort macros.
Version 1.6 (2009-05-08)
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
andHASH_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
Version 1.5 (2009-02-19)
-
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
Version 1.4 (2008-09-23)
-
Add
HASH_COUNT
for counting items in the hash -
Compatibility with C++. Satisfy additional casting requirements. Also in the
tests/
directory, runningmake 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 subtractinghho
(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 thatsizeof(void*) == sizeof(char*)
. -
Return meaningful exit status from do_tests per Tiago Cunha, so that package manager-based install can verify tests are successful
Version 1.3 (2008-07-27)
-
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 generalizedHASH_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
Version 1.2 (2006-11-22)
-
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).
Version 1.1 (2006-06-28)
-
uthash-1.1 released
-
supports several built-in user-selectable hash functions
-
new keystats utility quantifies performance of hash functions
Version 1.0 (2006-06-02)
-
Initial release