queue: add internal queue_move_first() and queue_move_last() APIs
This commit is contained in:
parent
34df608b98
commit
048d2cc363
21
src/queue.c
21
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) {
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user