uthash 是一个 C 语言的 hash 库; utstring 是前者的一个子项目,即 C 语言的动态字符串。本文将介绍如何将 utstring 作为 uthash 的 key 来使用。
HASH_KEYCMP
自定义该宏可以覆盖 uthash 默认比较 key 的方式。该宏有如下形式:
1
#define HASH_KEYCMP(a, b, n)
表达式的值为 0 则代表 a 和 b 两个 key 相等,任何非零值代表不相等,默认调用的是 memcmp 函数。
为方便编写代码,我们先定义一个辅助函数用来比较两个 utstring 的值:
1 2 3 4 5
staticintutstring_cmp(UT_string *a, UT_string *b) { int n = utstring_len(a); int result = n - utstring_len(b); return result ? result : memcmp(utstring_body(a), utstring_body(b), n); }
staticintutstring_cmp(UT_string *a, UT_string *b) { int n = utstring_len(a); int result = n - utstring_len(b); return result ? result : memcmp(utstring_body(a), utstring_body(b), n); }