52#if !defined(XF_LIST_POISON1) 
   53#   define XF_LIST_POISON1              0x00100100 
   55#if !defined(XF_LIST_POISON2) 
   56#   define XF_LIST_POISON2              0x00200200 
   82#define XF_LIST_HEAD_INIT(name) { &(name), &(name) } 
   87#define XF_LIST_HEAD(name) \ 
   88    xf_list_t name = XF_LIST_HEAD_INIT(name) 
 
  326    return list->
next == head;
 
 
  344    return head->
next == head;
 
 
  427    head->
next                  = new_node_first;
 
  428    new_node_first->
prev        = head;
 
 
  464            && (head->
next != entry && head != entry)) {
 
 
  595#define xf_list_entry(ptr, type, member) \ 
  596    xf_container_of(ptr, type, member) 
 
  617#define xf_list_first_entry(ptr, type, member) \ 
  618    xf_list_entry((ptr)->next, type, member) 
 
  632#define xf_list_for_each(pos, head) \ 
  633    for ((pos) = (head)->next; (pos) != (head); (pos) = (pos)->next) 
 
  652#define __xf_list_for_each(pos, head) \ 
  653    for ((pos) = (head)->next; (pos) != (head); (pos) = (pos)->next) 
 
  667#define xf_list_for_each_prev(pos, head) \ 
  668    for ((pos) = (head)->prev; (pos) != (head); (pos) = (pos)->prev) 
 
  684#define xf_list_for_each_safe(pos, n, head) \ 
  685    for ((pos) = (head)->next, (n) = (pos)->next; (pos) != (head); \ 
  686         (pos) = (n), (n) = (pos)->next) 
 
  702#define xf_list_for_each_prev_safe(pos, n, head) \ 
  703    for ((pos) = (head)->prev, (n) = (pos)->prev; \ 
  705         (pos) = (n), (n) = (pos)->prev) 
 
  732#define xf_list_for_each_entry(pos, head, type, member) \ 
  733    for ((pos) = xf_list_entry((head)->next, type, member); \ 
  734         &(pos)->member != (head); \ 
  735         (pos) = xf_list_entry((pos)->member.next, type, member)) 
 
  754#define xf_list_for_each_entry_reverse(pos, head, type, member) \ 
  755    for ((pos) = xf_list_entry((head)->prev, type, member); \ 
  756         &(pos)->member != (head); \ 
  757         (pos) = xf_list_entry((pos)->member.prev, type, member)) 
 
  779#define xf_list_prepare_entry(pos, head, type, member) \ 
  780    ((pos) ? : xf_list_entry(head, type, member)) 
 
  802#define xf_list_for_each_entry_continue(pos, head, type, member) \ 
  803    for ((pos) = xf_list_entry((pos)->member.next, type, member); \ 
  804         &(pos)->member != (head); \ 
  805         (pos) = xf_list_entry((pos)->member.next, type, member)) 
 
  827#define xf_list_for_each_entry_continue_reverse(pos, head, type, member) \ 
  828    for ((pos) = xf_list_entry((pos)->member.prev, type, member); \ 
  829         &(pos)->member != (head); \ 
  830         (pos) = xf_list_entry((pos)->member.prev, type, member)) 
 
  851#define xf_list_for_each_entry_from(pos, head, type, member) \ 
  852    for (; &(pos)->member != (head); \ 
  853         (pos) = xf_list_entry((pos)->member.next, type, member)) 
 
  876#define xf_list_for_each_entry_safe(pos, n, head, type, member) \ 
  877    for ((pos) = xf_list_entry((head)->next, type, member), \ 
  878         (n) = xf_list_entry((pos)->member.next, type, member); \ 
  879         &(pos)->member != (head); \ 
  880         (pos) = (n), (n) = xf_list_entry(n->member.next, type, member)) 
 
  906#define xf_list_for_each_entry_safe_continue(pos, n, head, type, member) \ 
  907    for ((pos) = xf_list_entry((pos)->member.next, type, member), \ 
  908         (n) = xf_list_entry((pos)->member.next, type, member); \ 
  909         &(pos)->member != (head); \ 
  910         (pos) = (n), (n) = xf_list_entry((n)->member.next, type, member)) 
 
  936#define xf_list_for_each_entry_safe_from(pos, n, head, type, member) \ 
  937    for ((n) = xf_list_entry((pos)->member.next, type, member); \ 
  938         &(pos)->member != (head); \ 
  939         (pos) = (n), (n) = xf_list_entry((n)->member.next, type, member)) 
 
  965#define xf_list_for_each_entry_safe_reverse(pos, n, head, type, member) \ 
  966    for ((pos) = xf_list_entry((head)->prev, type, member), \ 
  967         (n) = xf_list_entry((pos)->member.prev, type, member); \ 
  968         &(pos)->member != (head); \ 
  969         (pos) = (n), (n) = xf_list_entry((n)->member.prev, type, member)) 
 
  999#define xf_list_safe_reset_next(pos, n, type, member) \ 
 1000    (n) = xf_list_entry((pos)->member.next, type, member) 
 
static void xf_list_init(xf_list_t *list)
动态初始化链表.
 
static int xf_list_is_singular(const xf_list_t *head)
xf_list_is_singular - 测试链表是否只有一个节点.
 
static void xf_list_add_tail(xf_list_t *new_node, xf_list_t *head)
xf_list_add_tail - 在指定节点之前添加一个 new_node.
 
static void xf_list_del_init(xf_list_t *entry)
xf_list_del_init - 从链表中删除节点, 并重新初始化.
 
static void xf_list_splice(const xf_list_t *list, xf_list_t *head)
xf_list_splice - 连接两个链表, 这是为栈设计的.
 
static void __xf_list_splice(const xf_list_t *list, xf_list_t *prev, xf_list_t *next)
 
static void xf_list_cut_position(xf_list_t *list, xf_list_t *head, xf_list_t *entry)
xf_list_cut_position - 将链表切成两部分.
 
static void xf_list_replace(xf_list_t *old, xf_list_t *new_node)
xf_list_replace - 用 new_node 替换旧节点.
 
static int xf_list_empty(const xf_list_t *head)
xf_list_empty - 测试链表是否为空.
 
static void xf_list_splice_init(xf_list_t *list, xf_list_t *head)
xf_list_splice_init - 连接两个链表并重新初始化空链表.
 
static void __xf_list_add(xf_list_t *new_node, xf_list_t *prev, xf_list_t *next)
在两个已知的连续节点之间插入一个 new_node 节点.
 
static void xf_list_splice_tail(xf_list_t *list, xf_list_t *head)
xf_list_splice_tail - 连接两个链表, 每个链表都是一个队列
 
static void xf_list_splice_tail_init(xf_list_t *list, xf_list_t *head)
xf_list_splice_tail_init - 连接两个链表并重新初始化空链表.
 
static void xf_list_rotate_left(xf_list_t *head)
xf_list_rotate_left - 将链表向左旋转.
 
static void __xf_list_del_entry(xf_list_t *entry)
 
static void xf_list_move_tail(xf_list_t *list, xf_list_t *head)
xf_list_move_tail - 从一个链表中删除指定节点, 并添加为另一个链表的尾节点.
 
static int xf_list_empty_careful(const xf_list_t *head)
xf_list_empty_careful - 测试链表是否为空且未被修改.
 
static void xf_list_add(xf_list_t *new_node, xf_list_t *head)
xf_list_add - 在指定节点之后添加一个 new_node.
 
static int xf_list_is_last(const xf_list_t *list, const xf_list_t *head)
xf_list_is_last - 测试 list 是否是链表 head 中的最后一个节点.
 
static void xf_list_del(xf_list_t *entry)
xf_list_del - 从链表中删除节点.
 
static void xf_list_replace_init(xf_list_t *old, xf_list_t *new_node)
xf_list_replace_init - 用 new_node 替换旧节点, 并重新初始化旧节点.
 
static void __xf_list_cut_position(xf_list_t *list, xf_list_t *head, xf_list_t *entry)
 
static void xf_list_move(xf_list_t *list, xf_list_t *head)
xf_list_move - 从一个链表中删除指定节点, 并添加为另一个链表的头节点。.
 
static void __xf_list_del(xf_list_t *prev, xf_list_t *next)
删除链表节点(list entry), 使前一个/后一个节点相互指向.
 
struct xf_list_head * next
 
struct xf_list_head * prev