My Kernel v0.1.0
queue.h
Go to the documentation of this file.
1#pragma once
2
12#include <stdbool.h>
13
14#include "linked_list.h"
15
20
22#define __QUEUE_INIT __LLIST_INIT
23#define QUEUE_INIT LLIST_INIT
24
26#define __INIT_QUEUE __INIT_LLIST
27#define INIT_QUEUE INIT_LLIST
28
30#define DECLARE_QUEUE DECLARE_LLIST
31
33static inline bool queue_is_empty(const queue_t *queue)
34{
35 return llist_is_empty(queue);
36}
37
39static inline void queue_enqueue(queue_t *queue, node_t *new)
40{
41 llist_add_after(llist_last(queue), new);
42}
43
47static inline node_t *queue_dequeue(queue_t *queue)
48{
49 return llist_pop(queue);
50}
51
53static inline const node_t *queue_peek(const queue_t *queue)
54{
55 return llist_first(queue);
56}
57
62static inline void queue_enqueue_all(queue_t *queue, llist_t *elements)
63{
64 if (llist_is_empty(elements))
65 return;
66
67 llist_first(elements)->prev = llist_last(queue);
68 llist_last(queue)->next = llist_first(elements);
69
70 llist_last(elements)->next = llist_head(queue);
71 llist_head(queue)->prev = llist_last(elements);
72
73 INIT_LLIST(*elements);
74}
static node_t * llist_first(const llist_t *list)
Definition: linked_list.h:168
struct linked_list_node * next
Next item in the list.
Definition: linked_list.h:28
static node_t * llist_last(const llist_t *list)
Definition: linked_list.h:174
#define llist_head(_list)
Definition: linked_list.h:165
static void llist_add_after(node_t *prev, node_t *new)
Insert a new entry into a list.
Definition: linked_list.h:227
struct linked_list_node * prev
Previous item in the list.
Definition: linked_list.h:29
static PURE bool llist_is_empty(const llist_t *list)
Definition: linked_list.h:197
static node_t * llist_pop(llist_t *list)
Pop the first element in a list.
Definition: linked_list.h:278
static void queue_enqueue(queue_t *queue, node_t *new)
Insert the new element as the tail of the queue.
Definition: queue.h:39
static const node_t * queue_peek(const queue_t *queue)
Definition: queue.h:53
static bool queue_is_empty(const queue_t *queue)
Definition: queue.h:33
static void queue_enqueue_all(queue_t *queue, llist_t *elements)
Insert all the elements of a list into a queue.
Definition: queue.h:62
static node_t * queue_dequeue(queue_t *queue)
Pop the head from the queue.
Definition: queue.h:47
llist_t queue_t
A queue instance.
Definition: queue.h:19
The head of a doubly linked list.
Definition: linked_list.h:43
Intrusive doubly-linked list node.
Definition: linked_list.h:27