From 7d3000e84dcc15f9ce6c2dcbae1eed02dab6d1c0 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Thu, 2 Feb 2023 21:00:23 +0000 Subject: [PATCH] sandbox: queue: remove q_length field, add queue_empty() --- sandbox/queue/include/socks/queue.h | 8 +++++--- sandbox/queue/queue.c | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/sandbox/queue/include/socks/queue.h b/sandbox/queue/include/socks/queue.h index 741837d..e4d969a 100644 --- a/sandbox/queue/include/socks/queue.h +++ b/sandbox/queue/include/socks/queue.h @@ -2,10 +2,11 @@ #define SOCKS_QUEUE_H_ #include +#include #define QUEUE_CONTAINER(t, m, v) ((void *)((v) ? (uintptr_t)(v) - (offsetof(t, m)) : 0)) -#define QUEUE_INIT ((queue_t){ .q_first = NULL, .q_last = NULL, .q_length = 0 }) +#define QUEUE_INIT ((queue_t){ .q_first = NULL, .q_last = NULL }) #define QUEUE_ENTRY_INIT ((queue_entry_t){ .qe_next = NULL, .qe_prev = NULL }) #define queue_foreach(iter_type, iter_name, queue_name, node_member) \ @@ -26,17 +27,18 @@ typedef struct queue_entry { typedef struct queue { queue_entry_t *q_first; queue_entry_t *q_last; - unsigned int q_length; } queue_t; static inline void queue_init(queue_t *q) { memset(q, 0x00, sizeof *q); } -static inline unsigned int queue_length(queue_t *q) { return q->q_length; } +static inline bool queue_empty(queue_t *q) { return q->q_first == NULL; } static inline queue_entry_t *queue_first(queue_t *q) { return q->q_first; } static inline queue_entry_t *queue_last(queue_t *q) { return q->q_last; } static inline queue_entry_t *queue_next(queue_entry_t *entry) { return entry->qe_next; } static inline queue_entry_t *queue_prev(queue_entry_t *entry) { return entry->qe_prev; } +extern size_t queue_length(queue_t *q); + extern void queue_insert_before(queue_t *q, queue_entry_t *entry, queue_entry_t *before); extern void queue_insert_after(queue_t *q, queue_entry_t *entry, queue_entry_t *after); diff --git a/sandbox/queue/queue.c b/sandbox/queue/queue.c index c8a468a..dcc441c 100644 --- a/sandbox/queue/queue.c +++ b/sandbox/queue/queue.c @@ -2,6 +2,18 @@ #include #include +size_t queue_length(queue_t *q) +{ + size_t i = 0; + queue_entry_t *x = q->q_first; + while (x) { + i++; + x = x->qe_next; + } + + return i; +} + void queue_insert_before(queue_t *q, queue_entry_t *entry, queue_entry_t *before) { queue_entry_t *x = before->qe_prev; @@ -30,7 +42,6 @@ void queue_insert_after(queue_t *q, queue_entry_t *entry, queue_entry_t *after) after->qe_next = entry; entry->qe_prev = after; - q->q_length++; } void queue_push_front(queue_t *q, queue_entry_t *entry) @@ -47,8 +58,6 @@ void queue_push_front(queue_t *q, queue_entry_t *entry) if (!q->q_last) { q->q_last = entry; } - - q->q_length++; } void queue_push_back(queue_t *q, queue_entry_t *entry) @@ -65,8 +74,6 @@ void queue_push_back(queue_t *q, queue_entry_t *entry) if (!q->q_first) { q->q_first = entry; } - - q->q_length++; } queue_entry_t *queue_pop_front(queue_t *q) @@ -92,7 +99,6 @@ queue_entry_t *queue_pop_back(queue_t *q) void queue_delete(queue_t *q, queue_entry_t *entry) { if (!entry) { - printf("null entry\n"); return; } @@ -113,7 +119,6 @@ void queue_delete(queue_t *q, queue_entry_t *entry) } entry->qe_next = entry->qe_prev = NULL; - q->q_length--; } void queue_delete_all(queue_t *q) @@ -126,5 +131,4 @@ void queue_delete_all(queue_t *q) } q->q_first = q->q_last = NULL; - q->q_length = 0; }