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
1143
0559812df10c
assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents:
1142
diff
changeset
|
1 | # Hash Function |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
2 | |
1144
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
3 | UCX implements the MurmurHash2 algorithm for computing hashes that are primarily used for [CxMap](map.h.md). |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
4 | But it can be used for arbitrary custom scenarios, too. |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
5 | |
1145
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
6 | ## Overview |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
7 | ```C |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
8 | #include <cx/hash_key.h> |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
9 | |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
10 | void cx_hash_murmur(CxHashKey *key); |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
11 | CxHashKey cx_hash_key(const void *obj, size_t len); |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
12 | CxHashKey cx_hash_key_str(const char *str); |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
13 | CxHashKey cx_hash_key_bytes(const unsigned char *bytes, size_t len); |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
14 | CxHashKey cx_hash_key_cxstr(cxstring str); |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
15 | ``` |
1144
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
16 | |
1145
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
17 | ## Description |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
18 | |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
19 | The primary function for creating a `CxHashKey` structure is `cx_hash_key()`. |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
20 | The other functions do effectively the same, but |
1144
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
21 | |
1145
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
22 | * `cx_hash_key_bytes()` is strongly typed if you want to avoid passing `void*` |
1147
52802c36b261
fix minor bugs in hash_key.h and streams.h docs
Mike Becker <universe@uap-core.de>
parents:
1145
diff
changeset
|
23 | * `cx_hash_key_str()` conveniently takes a C string and computes the length |
1145
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
24 | * `cx_hash_key_cxstr()` conveniently takes a [UCX string](string.h.md) |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
25 | |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
26 | In all cases, the hash will be available in the `hash` field of the returned structure. |
1144
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
27 | |
1244
9a8e781258ac
complete most of the map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1147
diff
changeset
|
28 | |
9a8e781258ac
complete most of the map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1147
diff
changeset
|
29 | > UCX assigns the hash value `1574210520` to the `NULL` pointer. |
9a8e781258ac
complete most of the map.h documentation
Mike Becker <universe@uap-core.de>
parents:
1147
diff
changeset
|
30 | > This is a careful choice which is not standard MurmurHash2 and an extension to support `NULL` pointers. |
1144
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
31 | |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
32 | If you want to create a hash completely manually, |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
33 | you can initialize the `data` and `len` members of `CxHashKey` |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
34 | and call `cx_hash_murmur()`. |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
35 | It is _not_ recommended to do so. |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
36 | |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
37 | Example that is equivalent to `CxHashKey key = cx_hash_str(mystring)` |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
38 | ```C |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
39 | CxHashKey key; |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
40 | key.data = mystring; |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
41 | key.len = strlen(mystring); |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
42 | cx_hash_murmur(&key); |
b23d07fff6ca
documentation of hash_key.h
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
43 | ``` |
1145
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
44 | |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
45 | <seealso> |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
46 | <category ref="apidoc"> |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
47 | <a href="https://ucx.sourceforge.io/api/hash__key_8h.html">hash_key.h</a> |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
48 | </category> |
1a8fe7b7dd8a
add stream.h docs and reworks hash_key.h docs
Mike Becker <universe@uap-core.de>
parents:
1144
diff
changeset
|
49 | </seealso> |