Allow inserting items in the middle of a list.

This commit is contained in:
Guus Sliepen 2011-05-15 16:29:54 +02:00
parent 97355690b9
commit 4574b04f79
2 changed files with 21 additions and 0 deletions

View file

@ -91,6 +91,26 @@ list_node_t *list_insert_tail(list_t *list, void *data) {
return node; return node;
} }
list_node_t *list_insert_after(list_t *list, list_node_t *after, void *data) {
list_node_t *node;
node = list_alloc_node();
node->data = data;
node->next = after->next;
node->prev = after;
after->next = node;
if(node->next)
node->next->prev = node;
else
list->tail = node;
list->count++;
return node;
}
void list_unlink_node(list_t *list, list_node_t *node) { void list_unlink_node(list_t *list, list_node_t *node) {
if(node->prev) if(node->prev)
node->prev->next = node->next; node->prev->next = node->next;

View file

@ -54,6 +54,7 @@ extern void list_free_node(list_t *, list_node_t *);
extern list_node_t *list_insert_head(list_t *, void *); extern list_node_t *list_insert_head(list_t *, void *);
extern list_node_t *list_insert_tail(list_t *, void *); extern list_node_t *list_insert_tail(list_t *, void *);
extern list_node_t *list_insert_after(list_t *, list_node_t *, void *);
extern void list_unlink_node(list_t *, list_node_t *); extern void list_unlink_node(list_t *, list_node_t *);
extern void list_delete_node(list_t *, list_node_t *); extern void list_delete_node(list_t *, list_node_t *);