From 34df608b9895567e9b09c031b9550a61db65ee61 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Thu, 14 Sep 2017 16:24:48 +0200 Subject: [PATCH] queue: move implementation from header to queue.c --- src/queue.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ src/queue.h | 54 +++++++++++------------------------------------------ 2 files changed, 61 insertions(+), 43 deletions(-) create mode 100644 src/queue.c diff --git a/src/queue.c b/src/queue.c new file mode 100644 index 0000000..0ee814e --- /dev/null +++ b/src/queue.c @@ -0,0 +1,50 @@ +#include +#include + +#include "queue.h" + +void queue_init(queue_t* queue) { + queue_node_init(&queue->head); +} + +void queue_node_init(queue_node_t* node) { + node->prev = node; + node->next = node; +} + +queue_node_t* queue_first(const queue_t* queue) { + return !queue_empty(queue) ? queue->head.next : NULL; +} + +queue_node_t* queue_last(const queue_t* queue) { + return !queue_empty(queue) ? queue->head.prev : NULL; +} + +void queue_prepend(queue_t* queue, queue_node_t* node) { + node->next = queue->head.next; + node->prev = &queue->head; + node->next->prev = node; + queue->head.next = node; +} + +void queue_append(queue_t* queue, queue_node_t* node) { + node->next = &queue->head; + node->prev = queue->head.prev; + node->prev->next = node; + queue->head.prev = node; +} + +void queue_remove(queue_node_t* node) { + node->prev->next = node->next; + node->next->prev = node->prev; + node->prev = node; + node->next = node; +} + +bool queue_empty(const queue_t* queue) { + return !queue_enqueued(&queue->head); +} + +bool queue_enqueued(const queue_node_t* node) { + return node->prev != node; +} diff --git a/src/queue.h b/src/queue.h index 491d178..4061b0b 100644 --- a/src/queue.h +++ b/src/queue.h @@ -2,63 +2,31 @@ #define QUEUE_H_ #include -#include #include "internal.h" typedef struct queue_node queue_node_t; + typedef struct queue_node { queue_node_t* prev; queue_node_t* next; } queue_node_t; + typedef struct queue { queue_node_t head; } queue_t; -EPOLL_INTERNAL inline void queue_node_init(queue_node_t* node) { - node->prev = node; - node->next = node; -} +EPOLL_INTERNAL void queue_init(queue_t* queue); +EPOLL_INTERNAL void queue_node_init(queue_node_t* node); -EPOLL_INTERNAL inline void queue_init(queue_t* queue) { - queue_node_init(&queue->head); -} +EPOLL_INTERNAL queue_node_t* queue_first(const queue_t* queue); +EPOLL_INTERNAL queue_node_t* queue_last(const queue_t* queue); -EPOLL_INTERNAL inline bool queue_enqueued(const queue_node_t* node) { - return node->prev != node; -} +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_remove(queue_node_t* node); -EPOLL_INTERNAL inline bool queue_empty(const queue_t* queue) { - return !queue_enqueued(&queue->head); -} - -EPOLL_INTERNAL inline queue_node_t* queue_first(const queue_t* queue) { - return !queue_empty(queue) ? queue->head.next : NULL; -} - -EPOLL_INTERNAL inline queue_node_t* queue_last(const queue_t* queue) { - return !queue_empty(queue) ? queue->head.prev : NULL; -} - -EPOLL_INTERNAL inline void queue_prepend(queue_t* queue, queue_node_t* node) { - node->next = queue->head.next; - node->prev = &queue->head; - node->next->prev = node; - queue->head.next = node; -} - -EPOLL_INTERNAL inline void queue_append(queue_t* queue, queue_node_t* node) { - node->next = &queue->head; - node->prev = queue->head.prev; - node->prev->next = node; - queue->head.prev = node; -} - -EPOLL_INTERNAL inline void queue_remove(queue_node_t* node) { - node->prev->next = node->next; - node->next->prev = node->prev; - node->prev = node; - node->next = node; -} +EPOLL_INTERNAL bool queue_empty(const queue_t* queue); +EPOLL_INTERNAL bool queue_enqueued(const queue_node_t* node); #endif /* QUEUE_H_ */