Hash Table的数据结构从下到上可划分为:
// 存储键值对的地址
typedef struct dictEntry {
void *key;
union {
void *val;
uint64_t u64;
int64_t s64;
double d;
} v;
struct dictEntry *next;
} dictEntry;
// 底层哈希表的定义table是桶(bucket)。sizemask用于映射哈希值到桶中。sizemask = size - 1
typedef struct dictht {
dictEntry **table;
unsigned long size;
unsigned long sizemask;
unsigned long used;
} dictht;
// 高层哈希表的定义,保存两个dictht的目的是为了平滑过度。
typedef struct dict {
dictType *type;
void *privdata;
dictht ht[2];
long rehashidx; /* rehashing not in progress if rehashidx == -1 */
unsigned long iterators; /* number of iterators currently running */
} dict;
// 记录了dict的一些属性