Lines Matching refs:head

131  * added to the list after an existing element or at the head of the list.
132 * Elements being removed from the head of the list should use the explicit
142 * or after an existing element or at the head of the list. A list
145 * A simple queue is headed by a pair of pointers, one the head of the
148 * head of the list. New elements can be added to the list before or after
149 * an existing element, at the head of the list, or at the end of the
152 * A tail queue is headed by a pair of pointers, one to the head of the
156 * after an existing element, at the head of the list, or at the end of
159 * A circle queue is headed by a pair of pointers, one to the head of the
163 * an existing element, at the head of the list, or at the end of the list.
184 #define SLIST_HEAD_INITIALIZER(head) \
195 #define SLIST_FIRST(head) ((head)->slh_first)
196 #define SLIST_END(head) NULL
197 #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))
200 #define SLIST_FOREACH(var, head, field) \
201 for((var) = SLIST_FIRST(head); \
202 (var) != SLIST_END(head); \
205 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \
206 for ((var) = SLIST_FIRST(head); \
213 #define SLIST_INIT(head) { \
214 SLIST_FIRST(head) = SLIST_END(head); \
222 #define SLIST_INSERT_HEAD(head, elm, field) do { \
223 (elm)->field.sle_next = (head)->slh_first; \
224 (head)->slh_first = (elm); \
231 #define SLIST_REMOVE_HEAD(head, field) do { \
232 (head)->slh_first = (head)->slh_first->field.sle_next; \
235 #define SLIST_REMOVE(head, elm, type, field) do { \
236 if ((head)->slh_first == (elm)) { \
237 SLIST_REMOVE_HEAD((head), field); \
239 struct type *curelm = (head)->slh_first; \
257 #define LIST_HEAD_INITIALIZER(head) \
269 #define LIST_FIRST(head) ((head)->lh_first)
270 #define LIST_END(head) NULL
271 #define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head))
274 #define LIST_FOREACH(var, head, field) \
275 for((var) = LIST_FIRST(head); \
276 (var)!= LIST_END(head); \
279 #define LIST_FOREACH_SAFE(var, head, field, tvar) \
280 for ((var) = LIST_FIRST(head); \
287 #define LIST_INIT(head) do { \
288 LIST_FIRST(head) = LIST_END(head); \
306 #define LIST_INSERT_HEAD(head, elm, field) do { \
307 if (((elm)->field.le_next = (head)->lh_first) != NULL) \
308 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
309 (head)->lh_first = (elm); \
310 (elm)->field.le_prev = &(head)->lh_first; \
341 #define SIMPLEQ_HEAD_INITIALIZER(head) \
342 { NULL, &(head).sqh_first }
352 #define SIMPLEQ_FIRST(head) ((head)->sqh_first)
353 #define SIMPLEQ_END(head) NULL
354 #define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
357 #define SIMPLEQ_FOREACH(var, head, field) \
358 for((var) = SIMPLEQ_FIRST(head); \
359 (var) != SIMPLEQ_END(head); \
362 #define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \
363 for ((var) = SIMPLEQ_FIRST(head); \
370 #define SIMPLEQ_INIT(head) do { \
371 (head)->sqh_first = NULL; \
372 (head)->sqh_last = &(head)->sqh_first; \
375 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
376 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
377 (head)->sqh_last = &(elm)->field.sqe_next; \
378 (head)->sqh_first = (elm); \
381 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
383 *(head)->sqh_last = (elm); \
384 (head)->sqh_last = &(elm)->field.sqe_next; \
387 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
389 (head)->sqh_last = &(elm)->field.sqe_next; \
393 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \
394 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
395 (head)->sqh_last = &(head)->sqh_first; \
398 #define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \
401 (head)->sqh_last = &(elm)->field.sqe_next; \
413 #define TAILQ_HEAD_INITIALIZER(head) \
414 { NULL, &(head).tqh_first }
425 #define TAILQ_FIRST(head) ((head)->tqh_first)
426 #define TAILQ_END(head) NULL
428 #define TAILQ_LAST(head, headname) \
429 (*(((struct headname *)((head)->tqh_last))->tqh_last))
433 #define TAILQ_EMPTY(head) \
434 (TAILQ_FIRST(head) == TAILQ_END(head))
436 #define TAILQ_FOREACH(var, head, field) \
437 for((var) = TAILQ_FIRST(head); \
438 (var) != TAILQ_END(head); \
441 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
442 for ((var) = TAILQ_FIRST(head); \
443 (var) != TAILQ_END(head) && \
448 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
449 for((var) = TAILQ_LAST(head, headname); \
450 (var) != TAILQ_END(head); \
453 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
454 for ((var) = TAILQ_LAST(head, headname); \
455 (var) != TAILQ_END(head) && \
462 #define TAILQ_INIT(head) do { \
463 (head)->tqh_first = NULL; \
464 (head)->tqh_last = &(head)->tqh_first; \
467 #define TAILQ_INSERT_HEAD(head, elm, field) do { \
468 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
469 (head)->tqh_first->field.tqe_prev = \
472 (head)->tqh_last = &(elm)->field.tqe_next; \
473 (head)->tqh_first = (elm); \
474 (elm)->field.tqe_prev = &(head)->tqh_first; \
477 #define TAILQ_INSERT_TAIL(head, elm, field) do { \
479 (elm)->field.tqe_prev = (head)->tqh_last; \
480 *(head)->tqh_last = (elm); \
481 (head)->tqh_last = &(elm)->field.tqe_next; \
484 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
489 (head)->tqh_last = &(elm)->field.tqe_next; \
501 #define TAILQ_REMOVE(head, elm, field) do { \
506 (head)->tqh_last = (elm)->field.tqe_prev; \
512 #define TAILQ_REPLACE(head, elm, elm2, field) do { \
517 (head)->tqh_last = &(elm2)->field.tqe_next; \
533 #define CIRCLEQ_HEAD_INITIALIZER(head) \
534 { CIRCLEQ_END(&head), CIRCLEQ_END(&head) }
545 #define CIRCLEQ_FIRST(head) ((head)->cqh_first)
546 #define CIRCLEQ_LAST(head) ((head)->cqh_last)
547 #define CIRCLEQ_END(head) ((void *)(head))
550 #define CIRCLEQ_EMPTY(head) \
551 (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))
553 #define CIRCLEQ_FOREACH(var, head, field) \
554 for((var) = CIRCLEQ_FIRST(head); \
555 (var) != CIRCLEQ_END(head); \
558 #define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \
559 for ((var) = CIRCLEQ_FIRST(head); \
560 (var) != CIRCLEQ_END(head) && \
564 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \
565 for((var) = CIRCLEQ_LAST(head); \
566 (var) != CIRCLEQ_END(head); \
569 #define CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
570 for ((var) = CIRCLEQ_LAST(head, headname); \
571 (var) != CIRCLEQ_END(head) && \
578 #define CIRCLEQ_INIT(head) do { \
579 (head)->cqh_first = CIRCLEQ_END(head); \
580 (head)->cqh_last = CIRCLEQ_END(head); \
583 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
586 if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \
587 (head)->cqh_last = (elm); \
593 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
596 if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \
597 (head)->cqh_first = (elm); \
603 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
604 (elm)->field.cqe_next = (head)->cqh_first; \
605 (elm)->field.cqe_prev = CIRCLEQ_END(head); \
606 if ((head)->cqh_last == CIRCLEQ_END(head)) \
607 (head)->cqh_last = (elm); \
609 (head)->cqh_first->field.cqe_prev = (elm); \
610 (head)->cqh_first = (elm); \
613 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
614 (elm)->field.cqe_next = CIRCLEQ_END(head); \
615 (elm)->field.cqe_prev = (head)->cqh_last; \
616 if ((head)->cqh_first == CIRCLEQ_END(head)) \
617 (head)->cqh_first = (elm); \
619 (head)->cqh_last->field.cqe_next = (elm); \
620 (head)->cqh_last = (elm); \
623 #define CIRCLEQ_REMOVE(head, elm, field) do { \
624 if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \
625 (head)->cqh_last = (elm)->field.cqe_prev; \
629 if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \
630 (head)->cqh_first = (elm)->field.cqe_next; \
638 #define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \
640 CIRCLEQ_END(head)) \
641 (head).cqh_last = (elm2); \
645 CIRCLEQ_END(head)) \
646 (head).cqh_first = (elm2); \