adlist是redis的双向链表,比较简单,一目了然。
结构如下:
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
typedef struct listIter {
listNode *next;
int direction;
} listIter;
typedef struct list {
listNode *head;
listNode *tail;
void *(*dup)(void *ptr);
void (*free)(void *ptr);
int (*match)(void *ptr, void *key);
unsigned long len;
} list;
iterator带direction,listRewind将当前的iterator变为初始的正向iterator,listRewindTail将当前的iterator变为初始的反向iterator。