diff options
Diffstat (limited to 'sys/vm/queue.h')
-rw-r--r-- | sys/vm/queue.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/sys/vm/queue.h b/sys/vm/queue.h index 8eaa42a0328e7..7010951bbfc3c 100644 --- a/sys/vm/queue.h +++ b/sys/vm/queue.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)queue.h 7.3 (Berkeley) 4/21/91 - * $Id: queue.h,v 1.2 1993/10/16 16:20:18 rgrimes Exp $ + * $Id: queue.h,v 1.3 1994/04/14 07:50:17 davidg Exp $ */ /* @@ -111,6 +111,30 @@ typedef struct queue_entry *queue_entry_t; } \ } +#define queue_enter_head(head, elt, type, field) { \ + if (queue_empty((head))) { \ + (head)->next = (queue_entry_t) elt; \ + (head)->prev = (queue_entry_t) elt; \ + (elt)->field.next = head; \ + (elt)->field.prev = head; \ + } else { \ + register queue_entry_t next = (head)->next; \ + (elt)->field.prev = head; \ + (elt)->field.next = next; \ + (head)->next = (queue_entry_t)(elt); \ + ((type)next)->field.prev = (queue_entry_t)(elt);\ + } \ +} + +/* insert 'item' after 'position' using field 'field' */ +/* XXX might be broken - BEWARE */ +#define queue_insert(position, item, type, field) { \ + ((type) position->field.next)->field.prev = (queue_entry_t)(item); \ + (item)->field.next = (position)->field.next; \ + (position)->field.next = (queue_entry_t)(item); \ + (item)->field.prev = (queue_entry_t) position; \ +} + #define queue_field(head, thing, type, field) \ (((head) == (thing)) ? (head) : &((type)(thing))->field) |