Fri, 23 May 2025 12:44:24 +0200
make test-compile depend on both static and shared
the shared lib is not needed for the tests,
but when run with coverage, gcov will be confused
when outdated line information is available from
a previous shared build
# Hash Function UCX implements the MurmurHash2 algorithm for computing hashes that are primarily used for [CxMap](map.h.md). But it can be used for arbitrary custom scenarios, too. ## Overview ```C #include <cx/hash_key.h> void cx_hash_murmur(CxHashKey *key); CxHashKey cx_hash_key(const void *obj, size_t len); CxHashKey cx_hash_key_str(const char *str); CxHashKey cx_hash_key_bytes(const unsigned char *bytes, size_t len); CxHashKey cx_hash_key_cxstr(cxstring str); ``` ## Description The primary function for creating a `CxHashKey` structure is `cx_hash_key()`. The other functions do effectively the same, but * `cx_hash_key_bytes()` is strongly typed if you want to avoid passing `void*` * `cx_hash_key_str()` conveniently takes a C string and computes the length * `cx_hash_key_cxstr()` conveniently takes a [UCX string](string.h.md) In all cases, the hash will be available in the `hash` field of the returned structure. > UCX assigns the hash value `1574210520` to the `NULL` pointer. > This is a careful choice which is not standard MurmurHash2 and an extension to support `NULL` pointers. If you want to create a hash completely manually, you can initialize the `data` and `len` members of `CxHashKey` and call `cx_hash_murmur()`. It is _not_ recommended to do so. Example that is equivalent to `CxHashKey key = cx_hash_str(mystring)` ```C CxHashKey key; key.data = mystring; key.len = strlen(mystring); cx_hash_murmur(&key); ``` <seealso> <category ref="apidoc"> <a href="https://ucx.sourceforge.io/api/hash__key_8h.html">hash_key.h</a> </category> </seealso>