include: Add list_move_after() and list_move_before().

Cherry-picked from vkd3d commit a2996c2d59b140a0a92efc85d43c8f9b59540a12.
This commit is contained in:
Zebediah Figura 2022-08-30 21:37:32 +02:00 committed by Alexandre Julliard
parent 57c9bc9056
commit 099f84c4f0

View file

@ -150,8 +150,8 @@ static inline unsigned int list_count( const struct list *list )
return count;
}
/* move all elements from src to the tail of dst */
static inline void list_move_tail( struct list *dst, struct list *src )
/* move all elements from src to before the specified element */
static inline void list_move_before( struct list *dst, struct list *src )
{
if (list_empty(src)) return;
@ -162,8 +162,8 @@ static inline void list_move_tail( struct list *dst, struct list *src )
list_init(src);
}
/* move all elements from src to the head of dst */
static inline void list_move_head( struct list *dst, struct list *src )
/* move all elements from src to after the specified element */
static inline void list_move_after( struct list *dst, struct list *src )
{
if (list_empty(src)) return;
@ -174,6 +174,18 @@ static inline void list_move_head( struct list *dst, struct list *src )
list_init(src);
}
/* move all elements from src to the head of dst */
static inline void list_move_head( struct list *dst, struct list *src )
{
list_move_after( dst, src );
}
/* move all elements from src to the tail of dst */
static inline void list_move_tail( struct list *dst, struct list *src )
{
list_move_before( dst, src );
}
/* iterate through the list */
#define LIST_FOR_EACH(cursor,list) \
for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)