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;
|
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;
|
||||||
|
|
|
@ -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 *);
|
||||||
|
|
Loading…
Reference in a new issue