From 048d2cc363fe786e765f61634dd916650faed927 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Thu, 14 Sep 2017 16:37:31 +0200 Subject: [PATCH] queue: add internal queue_move_first() and queue_move_last() APIs --- src/queue.c | 21 +++++++++++++++++---- src/queue.h | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/queue.c b/src/queue.c index 0ee814e..3ad927e 100644 --- a/src/queue.c +++ b/src/queue.c @@ -12,6 +12,11 @@ void queue_node_init(queue_node_t* node) { node->next = node; } +static inline void _queue_detach(queue_node_t* node) { + node->prev->next = node->next; + node->next->prev = node->prev; +} + queue_node_t* queue_first(const queue_t* queue) { return !queue_empty(queue) ? queue->head.next : NULL; } @@ -34,11 +39,19 @@ void queue_append(queue_t* queue, queue_node_t* node) { queue->head.prev = node; } +void queue_move_first(queue_t* queue, queue_node_t* node) { + _queue_detach(node); + queue_prepend(queue, node); +} + +void queue_move_last(queue_t* queue, queue_node_t* node) { + _queue_detach(node); + queue_append(queue, node); +} + void queue_remove(queue_node_t* node) { - node->prev->next = node->next; - node->next->prev = node->prev; - node->prev = node; - node->next = node; + _queue_detach(node); + queue_node_init(node); } bool queue_empty(const queue_t* queue) { diff --git a/src/queue.h b/src/queue.h index 4061b0b..ce30a6d 100644 --- a/src/queue.h +++ b/src/queue.h @@ -24,6 +24,8 @@ EPOLL_INTERNAL queue_node_t* queue_last(const queue_t* queue); EPOLL_INTERNAL void queue_prepend(queue_t* queue, queue_node_t* node); EPOLL_INTERNAL void queue_append(queue_t* queue, queue_node_t* node); +EPOLL_INTERNAL void queue_move_first(queue_t* queue, queue_node_t* node); +EPOLL_INTERNAL void queue_move_last(queue_t* queue, queue_node_t* node); EPOLL_INTERNAL void queue_remove(queue_node_t* node); EPOLL_INTERNAL bool queue_empty(const queue_t* queue);