7.2.2 双向链表的使用方法

Nginx在设计这个双向链表时,由于容器与元素共用了ngx_queue_t结构体,为了避免ngx_queue_t结构体成员的意义混乱,Nginx封装了链表容器与元素的所有方法,这种情况非常少见,而且从接下来的几节中可以看到,其他容器都需要直接使用成员变量来访问,唯有ngx_queue_t双向链表只能使用图7-1中列出的方法访问容器。

使用双向链表容器时,需要用一个ngx_queue_t结构体表示容器本身,而这个结构体共有12个方法可供使用,表7-1中列出了这12个方法的意义。

7.2.2 双向链表的使用方法 - 图1

图 7-1 ngx_queue_t容器提供的操作方法

7.2.2 双向链表的使用方法 - 图2

7.2.2 双向链表的使用方法 - 图3

对于链表中的每一个元素,其类型可以是任意的struct结构体,但这个结构体中必须要有一个ngx_queue_t类型的成员,在向链表容器中添加、删除元素时都是使用的结构体中ngx_queue_t类型成员的指针。当ngx_queue_t作为链表的元素成员使用时,它具有表7-2中列出的4种方法。

7.2.2 双向链表的使用方法 - 图4

在表7-1和表7-2中,已经列出了链表支持的所有方法,下面将以一个简单的例子来说明如何使用ngx_queue_t双向链表。