From ed3f63ae37de0da3e8e75f7b3650c6481aa34fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 12 Mar 2004 21:34:20 +0000 Subject: [PATCH] Added a call to move the contents of one list to another. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6957 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/util/list.h | 1 + src/kernel/core/util/list.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/headers/private/kernel/util/list.h b/headers/private/kernel/util/list.h index 96b867240e..c064400c36 100644 --- a/headers/private/kernel/util/list.h +++ b/headers/private/kernel/util/list.h @@ -52,6 +52,7 @@ extern void list_add_item(struct list *list, void *item); extern void list_remove_item(struct list *list, void *item); extern void *list_remove_head_item(struct list *list); extern void *list_remove_tail_item(struct list *list); +extern void *list_move_to_list(struct list *sourceList, struct list *targetList); static inline bool list_is_empty(struct list *list) diff --git a/src/kernel/core/util/list.c b/src/kernel/core/util/list.c index 0f7e38b086..089076c6ec 100644 --- a/src/kernel/core/util/list.c +++ b/src/kernel/core/util/list.c @@ -189,3 +189,20 @@ list_remove_tail_item(struct list *list) return GET_ITEM(list, link); } + +/** Moves the contents of the source list to the target list. + * The target list will be emptied before the items are moved; + * this is a very fast operation. + */ + +void * +list_move_to_list(struct list *sourceList, struct list *targetList) +{ + *targetList = *sourceList; + targetList->link.next->prev = &targetList->link; + targetList->link.prev->next = &targetList->link; + + sourceList->link.next = sourceList->link.prev = &sourceList->link; +} + +