Redis Beta 1 源码阅读笔记 - Macros

Macros

01 listLength 宏定义

#define listLength(l) ((l)->len)

此宏定义是获取 list 的 len 属性, 即长度。 代码中的 l 的类型是 list

02 listFirst 宏定义

#define listFirst(l) ((l)->head)

此宏定义是获取 list 的 head 属性, 即头节点指针。 代码中的 l 的类型是 list

03 listNodeValue 宏定义

#define listNodeValue(n) ((n)->value)

此宏定义是获取 listNode 的 value 属性, 即节点值的地址。 代码中的 n 的类型是 listNode

04 REDIS_NOTUSED 宏定义

/* Anti-warning macro... */
#define REDIS_NOTUSED(V) ((void) V)

为了避免警告, 将 V 的类型强制转换为 void。

05 dictGetHashTableSize 宏定义

#define dictGetHashTableSize(ht) ((ht)->size)

获取哈希表的大小。

06 dictGetHashTableUsed 宏定义

#define dictGetHashTableUsed(ht) ((ht)->used)

获取哈希表已经使用的大小。

07 dictHashKey 宏定义

#define dictHashKey(ht, key) (ht)->type->hashFunction(key)

用于获取 dict 类型的 hashFunction 函数指针。

08 dictGetEntryKey 宏定义

#define dictGetEntryKey(he) ((he)->key)

用于获取哈希表条目的 key, he 就是 hashtable entry 的 缩写, 是一个 dictEntry 结构体, 直接获取其 key 字段

09 dictGetEntryVal 宏定义

#define dictGetEntryVal(he) ((he)->val)

用于获取哈希表条目的 val, he 就是 hashtable entry 的 缩写, 是一个 dictEntry 结构体, 直接获取其 val 字段

10 listSetFreeMethod 宏定义

#define listSetFreeMethod(l,m) ((l)->free = (m))

该宏定义用于设置 List 对象的 Free 方法。 宏定义中的 l 就是 List, m 就是指定的某一方法函数。

11 dictCompareHashKeys 宏定义

#define dictCompareHashKeys(ht, key1, key2) \
    (((ht)->type->keyCompare) ? \
        (ht)->type->keyCompare((ht)->privdata, key1, key2) : \
        (key1) == (key2))

该宏定义用于比较两个 key, 如果定义了哈希表的 type 的 keyCompare 属性, 则会执行该函数, keyCompare 是一个函数指针。 否则就直接比较 key1 与 key2 是否相等。

12 DICT_NOTUSED 宏定义

#define DICT_NOTUSED(V) ((void) V)

将没有使用的 Dict 值转换为 void 类型, 避免警告。

13 dictSetHashKey 宏定义

#define dictSetHashKey(ht, entry, _key_) do { \
    if ((ht)->type->keyDup) \
        entry->key = (ht)->type->keyDup((ht)->privdata, _key_); \
    else \
        entry->key = (_key_); \
} while(0)

设置哈希表中的 key, 当指定了 type->keyDup, 那么将会执行该函数, 否则就直接将 key 设置为给定的 _key_

14 dictSetHashVal 宏定义

#define dictSetHashVal(ht, entry, _val_) do { \
    if ((ht)->type->valDup) \
        entry->val = (ht)->type->valDup((ht)->privdata, _val_); \
    else \
        entry->val = (_val_); \
} while(0)

设置哈希表中的 value, 当指定了 type->valDup, 那么将会执行该函数, 否则就直接将 val 设置为给定的 _val_