Allow inserting items in the middle of a list.
This commit is contained in:
parent
97355690b9
commit
4574b04f79
2 changed files with 21 additions and 0 deletions
20
src/list.c
20
src/list.c
|
@ -91,6 +91,26 @@ list_node_t *list_insert_tail(list_t *list, void *data) {
|
|||
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) {
|
||||
if(node->prev)
|
||||
node->prev->next = node->next;
|
||||
|
|
|
@ -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_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_delete_node(list_t *, list_node_t *);
|
||||
|
|
Loading…
Reference in a new issue