Lines Matching refs:head

46  * A tail queue is headed by a pair of pointers, one to the head of the
50 * after an existing element, at the head of the list, or at the end of
63 #define SM_TAILQ_HEAD_INITIALIZER(head) \
64 { NULL, &(head).tqh_first }
75 #define SM_TAILQ_FIRST(head) ((head)->tqh_first)
76 #define SM_TAILQ_END(head) NULL
78 #define SM_TAILQ_LAST(head, headname) \
79 (*(((struct headname *)((head)->tqh_last))->tqh_last))
83 #define SM_TAILQ_EMPTY(head) \
84 (SM_TAILQ_FIRST(head) == SM_TAILQ_END(head))
86 #define SM_TAILQ_FOREACH(var, head, field) \
87 for((var) = SM_TAILQ_FIRST(head); \
88 (var) != SM_TAILQ_END(head); \
91 #define SM_TAILQ_FOREACH_REVERSE(var, head, headname, field) \
92 for((var) = SM_TAILQ_LAST(head, headname); \
93 (var) != SM_TAILQ_END(head); \
99 #define SM_TAILQ_INIT(head) do { \
100 (head)->tqh_first = NULL; \
101 (head)->tqh_last = &(head)->tqh_first; \
104 #define SM_TAILQ_INSERT_HEAD(head, elm, field) do { \
105 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
106 (head)->tqh_first->field.tqe_prev = \
109 (head)->tqh_last = &(elm)->field.tqe_next; \
110 (head)->tqh_first = (elm); \
111 (elm)->field.tqe_prev = &(head)->tqh_first; \
114 #define SM_TAILQ_INSERT_TAIL(head, elm, field) do { \
116 (elm)->field.tqe_prev = (head)->tqh_last; \
117 *(head)->tqh_last = (elm); \
118 (head)->tqh_last = &(elm)->field.tqe_next; \
121 #define SM_TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
126 (head)->tqh_last = &(elm)->field.tqe_next; \
138 #define SM_TAILQ_REMOVE(head, elm, field) do { \
143 (head)->tqh_last = (elm)->field.tqe_prev; \
147 #define SM_TAILQ_REPLACE(head, elm, elm2, field) do { \
152 (head)->tqh_last = &(elm2)->field.tqe_next; \