Hash Function
UCX implements the MurmurHash2 algorithm for computing hashes that are primarily used for CxMap. But it can be used for arbitrary custom scenarios, too.
Overview
Description
The primary function for creating a CxHashKey structure from nonintegers is cx_hash_key(). The other functions effectively do the same, but
cx_hash_key_bytes()is strongly typed if you want to avoid passingvoid*cx_hash_key_str()conveniently takes a C string and computes the lengthcx_hash_key_ustr()same as before, but forunsigned char*cx_hash_key_cxstr()conveniently takes a UCX string
In all cases, the hash will be available in the hash field of the returned structure.
Hashes from integers are created more efficiently by mixing up the bits to produce a good statistical distribution. The function cx_hash_u32() and cx_hash_u64() are provided for this purpose and provide collision-free hashes. The corresponding functions cx_hash_key_u32() and cx_hash_key_u64() can be used to create CxHashKey structures with those hashes.
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)
Hash keys are compared with cx_hash_key_cmp().
When you have a key that stores a string, you can retrieve it by using cx_hash_key_as_string().