quicklist实现了一个双向循环链表。文件中也有提及,它是参照linux 2.4.3中的list.h设计的。这一设计主要有两个特点:
1. 使用了宿主 机制,提高了代码的通用性,详见下述数据结构说明;
2. 使用了大量的内联 函数和宏 定义,目的是简化部分代码书写,减小运行时的函数调用开销,详见下述功能函数说明。
- 数据结构
只有一个双向链表节点:
不包含链表项是为了提高通用性,不然需要为每一种不同类型的链表项重复所有的功能函数,因为C语言没有模板或者装箱等通用机制(当然,可以考虑使用void指针来提高通用性,参见llist )。
这种链表使用时需要宿主结构体 ,才能产生实际作用,也就是说能通过链表节点,获得我们附加的数据。传统实现方式就是将这些附加信息直接写到如上节点结构体中,而通用实现方式下,则是写到用户自定义的宿主结构体中。例如:
使用时,调用如下宏定义: