Skip to content

Commit 009f74b

Browse files
committed
Added is_empty function
1 parent cccf378 commit 009f74b

3 files changed

Lines changed: 16 additions & 1 deletion

File tree

include/queue.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ typedef struct {
1111
_Alignas(64) atomic_size_t head;
1212
_Alignas(64) atomic_size_t tail;
1313
size_t mask;
14-
data_t **buffer;
14+
data_t **buffer;
1515
} spsc_queue_t;
1616

1717
bool spsc_init(spsc_queue_t *q, size_t size);
@@ -22,4 +22,6 @@ bool spsc_enqueue(spsc_queue_t *q, data_t *item);
2222

2323
bool spsc_dequeue(spsc_queue_t *q, data_t **item);
2424

25+
bool spsc_is_empty(spsc_queue_t *q);
26+
2527
#endif //SPSC_QUEUE_LIBRARY_H

src/queue.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,11 @@ bool spsc_dequeue(spsc_queue_t *q, data_t **item)
5858
atomic_store_explicit(&q->head, current_head + 1, memory_order_release);
5959
return true;
6060
}
61+
62+
bool spsc_is_empty(spsc_queue_t *q)
63+
{
64+
size_t head = atomic_load_explicit(&q->head, memory_order_acquire);
65+
size_t tail = atomic_load_explicit(&q->tail, memory_order_acquire);
66+
return head == tail;
67+
}
68+

tests/QueueTests.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,21 @@ TEST(QueueTests, test1)
1313
spsc_queue_t queue;
1414
spsc_init(&queue, 512);
1515

16+
ASSERT_TRUE(spsc_is_empty(&queue));
17+
1618
data_t test = {nullptr, 1, 2, 3};
1719
ASSERT_TRUE(spsc_enqueue(&queue, &test));
20+
ASSERT_FALSE(spsc_is_empty(&queue));
1821

1922
data_t *test2 = nullptr;
2023
ASSERT_TRUE(spsc_dequeue(&queue, &test2));
2124
ASSERT_EQ(test.size, (*test2).size);
2225
ASSERT_EQ(test.width, (*test2).width);
2326
ASSERT_EQ(test.cap, (*test2).cap);
27+
ASSERT_TRUE(spsc_is_empty(&queue));
2428

2529
ASSERT_FALSE(spsc_dequeue(&queue, &test2));
30+
ASSERT_TRUE(spsc_is_empty(&queue));
2631

2732
spsc_destroy(&queue);
2833
}

0 commit comments

Comments
 (0)