Lines Matching refs:list

29  * Generic doubly-linked list implementation
32 #include <sys/list.h>
42 #define list_insert_after_node(list, node, object) { \
43 list_node_t *lnew = list_d2l(list, object); \
50 #define list_insert_before_node(list, node, object) { \
51 list_node_t *lnew = list_d2l(list, object); \
64 list_create(list_t *list, size_t size, size_t offset)
66 ASSERT(list);
70 list->list_size = size;
71 list->list_offset = offset;
72 list->list_head.list_next = list->list_head.list_prev =
73 &list->list_head;
77 list_destroy(list_t *list)
79 list_node_t *node = &list->list_head;
81 ASSERT(list);
82 ASSERT(list->list_head.list_next == node);
83 ASSERT(list->list_head.list_prev == node);
89 list_insert_after(list_t *list, void *object, void *nobject)
92 list_insert_head(list, nobject);
94 list_node_t *lold = list_d2l(list, object);
95 list_insert_after_node(list, lold, nobject);
100 list_insert_before(list_t *list, void *object, void *nobject)
103 list_insert_tail(list, nobject);
105 list_node_t *lold = list_d2l(list, object);
106 list_insert_before_node(list, lold, nobject);
111 list_insert_head(list_t *list, void *object)
113 list_node_t *lold = &list->list_head;
114 list_insert_after_node(list, lold, object);
118 list_insert_tail(list_t *list, void *object)
120 list_node_t *lold = &list->list_head;
121 list_insert_before_node(list, lold, object);
125 list_remove(list_t *list, void *object)
127 list_node_t *lold = list_d2l(list, object);
128 ASSERT(!list_empty(list));
134 list_remove_head(list_t *list)
136 list_node_t *head = list->list_head.list_next;
137 if (head == &list->list_head)
140 return (list_object(list, head));
144 list_remove_tail(list_t *list)
146 list_node_t *tail = list->list_head.list_prev;
147 if (tail == &list->list_head)
150 return (list_object(list, tail));
154 list_head(list_t *list)
156 if (list_empty(list))
158 return (list_object(list, list->list_head.list_next));
162 list_tail(list_t *list)
164 if (list_empty(list))
166 return (list_object(list, list->list_head.list_prev));
170 list_next(list_t *list, void *object)
172 list_node_t *node = list_d2l(list, object);
174 if (node->list_next != &list->list_head)
175 return (list_object(list, node->list_next));
181 list_prev(list_t *list, void *object)
183 list_node_t *node = list_d2l(list, object);
185 if (node->list_prev != &list->list_head)
186 return (list_object(list, node->list_prev));
192 * Insert src list after dst list. Empty src list thereafter.
211 /* empty src list */
242 list_is_empty(list_t *list)
244 return (list_empty(list));