TAILQ_QUEUE队列
来源:互联网 发布:萧敬腾雨神真相知乎 编辑:程序博客网 时间:2024/06/05 22:31
代码实现如下:
/* * Tail queue definitions. */#define TAILQ_HEAD(name, type)\struct name {\struct type *tqh_first;/* first element */\struct type **tqh_last;/* addr of last next element */\}#define TAILQ_HEAD_INITIALIZER(head)\{ NULL, &(head).tqh_first }#define TAILQ_ENTRY(type)\struct {\struct type *tqe_next;/* next element */\struct type **tqe_prev;/* address of previous next element */\}/* * tail queue access methods */#defineTAILQ_FIRST(head)((head)->tqh_first)#defineTAILQ_END(head)NULL#defineTAILQ_NEXT(elm, field)((elm)->field.tqe_next)#define TAILQ_LAST(head, headname)\(*(((struct headname *)((head)->tqh_last))->tqh_last))/* XXX */#define TAILQ_PREV(elm, headname, field)\(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))#defineTAILQ_EMPTY(head)\(TAILQ_FIRST(head) == TAILQ_END(head))#define TAILQ_FOREACH(var, head, field)\for((var) = TAILQ_FIRST(head);\ (var) != TAILQ_END(head);\ (var) = TAILQ_NEXT(var, field))#define TAILQ_FOREACH_REVERSE(var, head, headname, field)\for((var) = TAILQ_LAST(head, headname);\ (var) != TAILQ_END(head);\ (var) = TAILQ_PREV(var, headname, field))/* * Tail queue functions. */#defineTAILQ_INIT(head) do {\(head)->tqh_first = NULL;\(head)->tqh_last = &(head)->tqh_first;\} while (0)#define TAILQ_INSERT_HEAD(head, elm, field) do {\if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)\(head)->tqh_first->field.tqe_prev =\ &(elm)->field.tqe_next;\else\(head)->tqh_last = &(elm)->field.tqe_next;\(head)->tqh_first = (elm);\(elm)->field.tqe_prev = &(head)->tqh_first;\} while (0)#define TAILQ_INSERT_TAIL(head, elm, field) do {\(elm)->field.tqe_next = NULL;\(elm)->field.tqe_prev = (head)->tqh_last;\*(head)->tqh_last = (elm);\(head)->tqh_last = &(elm)->field.tqe_next;\} while (0)#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do {\if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\(elm)->field.tqe_next->field.tqe_prev =\ &(elm)->field.tqe_next;\else\(head)->tqh_last = &(elm)->field.tqe_next;\(listelm)->field.tqe_next = (elm);\(elm)->field.tqe_prev = &(listelm)->field.tqe_next;\} while (0)#defineTAILQ_INSERT_BEFORE(listelm, elm, field) do {\(elm)->field.tqe_prev = (listelm)->field.tqe_prev;\(elm)->field.tqe_next = (listelm);\*(listelm)->field.tqe_prev = (elm);\(listelm)->field.tqe_prev = &(elm)->field.tqe_next;\} while (0)#define TAILQ_REMOVE(head, elm, field) do {\if (((elm)->field.tqe_next) != NULL)\(elm)->field.tqe_next->field.tqe_prev =\ (elm)->field.tqe_prev;\else\(head)->tqh_last = (elm)->field.tqe_prev;\*(elm)->field.tqe_prev = (elm)->field.tqe_next;\} while (0)#define TAILQ_REPLACE(head, elm, elm2, field) do {\if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL)\(elm2)->field.tqe_next->field.tqe_prev =\ &(elm2)->field.tqe_next;\else\(head)->tqh_last = &(elm2)->field.tqe_next;\(elm2)->field.tqe_prev = (elm)->field.tqe_prev;\*(elm2)->field.tqe_prev = (elm2);\} while (0)
0 0
- TAILQ_QUEUE队列
- libevent数据结构-TAILQ_QUEUE队列
- Libevent源码分析-----TAILQ_QUEUE队列
- Libevent源码分析-----TAILQ_QUEUE队列
- Libevent源码分析-----TAILQ_QUEUE队列
- Libevent源码分析-----TAILQ_QUEUE队列
- Libevent源码分析-----TAILQ_QUEUE队列
- Libevent源码分析-----TAILQ_QUEUE队列
- libevent学习之TAILQ_QUEUE理解
- libevent源码分析-- queue.h中TAILQ_QUEUE的理解
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- sleep waitFor区别
- gdb结合coredump定位崩溃进程
- 装黑苹果系统 VirtualBOX 虚拟机安装 OS X 10.9 Mavericks 及 Xcode 5,本人X220亲测
- DPL,RPL,CPL 之间的联系和区别
- expect详解
- TAILQ_QUEUE队列
- Java中的反射
- OC中方法与函数的区别
- QC Vuforia 扩展追踪和智能地形介绍
- centos安装tomcat
- 保护模式 对CPL,RPL,DPL 的总结
- hdu 1181 变形课(恶心的输入)
- Gson工具的抽取
- url参数中出现+、空格、=、%、&、#等字符的解决办法