diff -r 0f70bb04f7ba -r b0300de92b72 docs/Writerside/topics/hash_key.h.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/Writerside/topics/hash_key.h.md Tue Feb 11 19:55:32 2025 +0100 @@ -0,0 +1,50 @@ +# 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 + +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); +``` + + + +hash_key.h + + \ No newline at end of file