Lines Matching refs:head

55  * head of the list.  Elements being removed from the head of the list
65 * or after an existing element or at the head of the list. A list
68 * A simple queue is headed by a pair of pointers, one the head of the
71 * head of the list. New elements can be added to the list after
72 * an existing element, at the head of the list, or at the end of the
75 * A tail queue is headed by a pair of pointers, one to the head of the
79 * after an existing element, at the head of the list, or at the end of
82 * A circle queue is headed by a pair of pointers, one to the head of the
86 * an existing element, at the head of the list, or at the end of the list.
101 #define LIST_HEAD_INITIALIZER(head) \
114 #define QUEUEDEBUG_LIST_INSERT_HEAD(head, elm, field) \
115 if ((head)->lh_first && \
116 (head)->lh_first->field.le_prev != &(head)->lh_first) \
117 panic("LIST_INSERT_HEAD %p %s:%d", (head), __FILE__, __LINE__);
129 #define QUEUEDEBUG_LIST_INSERT_HEAD(head, elm, field)
134 #define LIST_INIT(head) do { \
135 (head)->lh_first = NULL; \
158 #define LIST_INSERT_HEAD(head, elm, field) do { \
159 QUEUEDEBUG_LIST_INSERT_HEAD((head), (elm), field) \
160 if (((elm)->field.le_next = (head)->lh_first) != NULL) \
161 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
162 (head)->lh_first = (elm); \
163 (elm)->field.le_prev = &(head)->lh_first; \
177 #define LIST_FOREACH(var, head, field) \
178 for ((var) = ((head)->lh_first); \
185 #define LIST_EMPTY(head) ((head)->lh_first == NULL)
186 #define LIST_FIRST(head) ((head)->lh_first)
198 #define SLIST_HEAD_INITIALIZER(head) \
209 #define SLIST_INIT(head) do { \
210 (head)->slh_first = NULL; \
220 #define SLIST_INSERT_HEAD(head, elm, field) do { \
221 (elm)->field.sle_next = (head)->slh_first; \
222 (head)->slh_first = (elm); \
226 #define SLIST_REMOVE_HEAD(head, field) do { \
227 (head)->slh_first = (head)->slh_first->field.sle_next; \
231 #define SLIST_REMOVE(head, elm, type, field) do { \
232 if ((head)->slh_first == (elm)) { \
233 SLIST_REMOVE_HEAD((head), field); \
236 struct type *curelm = (head)->slh_first; \
245 #define SLIST_FOREACH(var, head, field) \
246 for ((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
251 #define SLIST_EMPTY(head) ((head)->slh_first == NULL)
252 #define SLIST_FIRST(head) ((head)->slh_first)
265 #define STAILQ_HEAD_INITIALIZER(head) \
266 { NULL, &(head).stqh_first }
276 #define STAILQ_INIT(head) do { \
277 (head)->stqh_first = NULL; \
278 (head)->stqh_last = &(head)->stqh_first; \
282 #define STAILQ_INSERT_HEAD(head, elm, field) do { \
283 if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \
284 (head)->stqh_last = &(elm)->field.stqe_next; \
285 (head)->stqh_first = (elm); \
289 #define STAILQ_INSERT_TAIL(head, elm, field) do { \
291 *(head)->stqh_last = (elm); \
292 (head)->stqh_last = &(elm)->field.stqe_next; \
296 #define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
299 (head)->stqh_last = &(elm)->field.stqe_next; \
304 #define STAILQ_REMOVE_HEAD(head, field) do { \
305 if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) \
307 (head)->stqh_last = &(head)->stqh_first; \
311 #define STAILQ_REMOVE(head, elm, type, field) do { \
312 if ((head)->stqh_first == (elm)) { \
313 STAILQ_REMOVE_HEAD((head), field); \
315 struct type *curelm = (head)->stqh_first; \
320 (head)->stqh_last = &(curelm)->field.stqe_next; \
325 #define STAILQ_FOREACH(var, head, field) \
326 for ((var) = ((head)->stqh_first); \
333 #define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
334 #define STAILQ_FIRST(head) ((head)->stqh_first)
347 #define SIMPLEQ_HEAD_INITIALIZER(head) \
348 { NULL, &(head).sqh_first }
358 #define SIMPLEQ_INIT(head) do { \
359 (head)->sqh_first = NULL; \
360 (head)->sqh_last = &(head)->sqh_first; \
364 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
365 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
366 (head)->sqh_last = &(elm)->field.sqe_next; \
367 (head)->sqh_first = (elm); \
371 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
373 *(head)->sqh_last = (elm); \
374 (head)->sqh_last = &(elm)->field.sqe_next; \
378 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
380 (head)->sqh_last = &(elm)->field.sqe_next; \
385 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \
386 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
387 (head)->sqh_last = &(head)->sqh_first; \
391 #define SIMPLEQ_REMOVE(head, elm, type, field) do { \
392 if ((head)->sqh_first == (elm)) { \
393 SIMPLEQ_REMOVE_HEAD((head), field); \
395 struct type *curelm = (head)->sqh_first; \
400 (head)->sqh_last = &(curelm)->field.sqe_next; \
405 #define SIMPLEQ_FOREACH(var, head, field) \
406 for ((var) = ((head)->sqh_first); \
413 #define SIMPLEQ_EMPTY(head) ((head)->sqh_first == NULL)
414 #define SIMPLEQ_FIRST(head) ((head)->sqh_first)
428 #define TAILQ_HEAD_INITIALIZER(head) \
429 { NULL, &(head).tqh_first }
442 #define QUEUEDEBUG_TAILQ_INSERT_HEAD(head, elm, field) \
443 if ((head)->tqh_first && \
444 (head)->tqh_first->field.tqe_prev != &(head)->tqh_first) \
445 panic("TAILQ_INSERT_HEAD %p %s:%d", (void *)(head), \
447 #define QUEUEDEBUG_TAILQ_INSERT_TAIL(head, elm, field) \
448 if (*(head)->tqh_last != NULL) \
449 panic("TAILQ_INSERT_TAIL %p %s:%d", (void *)(head), \
460 #define QUEUEDEBUG_TAILQ_PREREMOVE(head, elm, field) \
462 (head)->tqh_last != &(elm)->field.tqe_next) \
463 panic("TAILQ_PREREMOVE head %p elm %p %s:%d", \
464 (void *)(head), (void *)(elm), __FILE__, __LINE__);
469 #define QUEUEDEBUG_TAILQ_INSERT_HEAD(head, elm, field)
470 #define QUEUEDEBUG_TAILQ_INSERT_TAIL(head, elm, field)
472 #define QUEUEDEBUG_TAILQ_PREREMOVE(head, elm, field)
476 #define TAILQ_INIT(head) do { \
477 (head)->tqh_first = NULL; \
478 (head)->tqh_last = &(head)->tqh_first; \
482 #define TAILQ_INSERT_HEAD(head, elm, field) do { \
483 QUEUEDEBUG_TAILQ_INSERT_HEAD((head), (elm), field) \
484 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
485 (head)->tqh_first->field.tqe_prev = \
488 (head)->tqh_last = &(elm)->field.tqe_next; \
489 (head)->tqh_first = (elm); \
490 (elm)->field.tqe_prev = &(head)->tqh_first; \
494 #define TAILQ_INSERT_TAIL(head, elm, field) do { \
495 QUEUEDEBUG_TAILQ_INSERT_TAIL((head), (elm), field) \
497 (elm)->field.tqe_prev = (head)->tqh_last; \
498 *(head)->tqh_last = (elm); \
499 (head)->tqh_last = &(elm)->field.tqe_next; \
503 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
509 (head)->tqh_last = &(elm)->field.tqe_next; \
524 #define TAILQ_REMOVE(head, elm, field) do { \
525 QUEUEDEBUG_TAILQ_PREREMOVE((head), (elm), field) \
531 (head)->tqh_last = (elm)->field.tqe_prev; \
537 #define TAILQ_FOREACH(var, head, field) \
538 for ((var) = ((head)->tqh_first); \
542 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
543 for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));\
551 #define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
552 #define TAILQ_FIRST(head) ((head)->tqh_first)
555 #define TAILQ_LAST(head, headname) \
556 (*(((struct headname *)((head)->tqh_last))->tqh_last))
570 #define CIRCLEQ_HEAD_INITIALIZER(head) \
571 { (void *)&head, (void *)&head }
582 #define CIRCLEQ_INIT(head) do { \
583 (head)->cqh_first = (void *)(head); \
584 (head)->cqh_last = (void *)(head); \
588 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
591 if ((listelm)->field.cqe_next == (void *)(head)) \
592 (head)->cqh_last = (elm); \
599 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
602 if ((listelm)->field.cqe_prev == (void *)(head)) \
603 (head)->cqh_first = (elm); \
610 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
611 (elm)->field.cqe_next = (head)->cqh_first; \
612 (elm)->field.cqe_prev = (void *)(head); \
613 if ((head)->cqh_last == (void *)(head)) \
614 (head)->cqh_last = (elm); \
616 (head)->cqh_first->field.cqe_prev = (elm); \
617 (head)->cqh_first = (elm); \
621 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
622 (elm)->field.cqe_next = (void *)(head); \
623 (elm)->field.cqe_prev = (head)->cqh_last; \
624 if ((head)->cqh_first == (void *)(head)) \
625 (head)->cqh_first = (elm); \
627 (head)->cqh_last->field.cqe_next = (elm); \
628 (head)->cqh_last = (elm); \
632 #define CIRCLEQ_REMOVE(head, elm, field) do { \
633 if ((elm)->field.cqe_next == (void *)(head)) \
634 (head)->cqh_last = (elm)->field.cqe_prev; \
638 if ((elm)->field.cqe_prev == (void *)(head)) \
639 (head)->cqh_first = (elm)->field.cqe_next; \
646 #define CIRCLEQ_FOREACH(var, head, field) \
647 for ((var) = ((head)->cqh_first); \
648 (var) != (void *)(head); \
651 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \
652 for ((var) = ((head)->cqh_last); \
653 (var) != (void *)(head); \
659 #define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head))
660 #define CIRCLEQ_FIRST(head) ((head)->cqh_first)
661 #define CIRCLEQ_LAST(head) ((head)->cqh_last)
665 #define CIRCLEQ_LOOP_NEXT(head, elm, field) \
666 (((elm)->field.cqe_next == (void *)(head)) \
667 ? ((head)->cqh_first) \
669 #define CIRCLEQ_LOOP_PREV(head, elm, field) \
670 (((elm)->field.cqe_prev == (void *)(head)) \
671 ? ((head)->cqh_last) \