Files
osc2025/kernel/include/queue.h

35 lines
926 B
C

#pragma once
#include <stddef.h>
typedef struct queue_node {
struct queue_node *prev, *next;
uint64_t value;
} queue_node_t;
typedef struct queue {
size_t size;
queue_node_t *begin, *end;
} queue_t;
queue_t *make_queue();
uint64_t queue_back(const queue_t *queue);
uint64_t queue_front(const queue_t *queue);
void queue_push_back(queue_t *queue, uint64_t val);
void queue_push_front(queue_t *queue, uint64_t val);
uint64_t queue_pop_back(queue_t *queue);
uint64_t queue_pop_front(queue_t *queue);
#define QUEUE_BACK(type, queue) ((type *)queue_back(queue))
#define QUEUE_FRONT(type, queue) ((type *)queue_front(queue))
#define QUEUE_PUSH_BACK(queue, val) queue_push_back(queue, (uint64_t)val)
#define QUEUE_PUSH_FRONT(queue, val) queue_push_front(queue, (uint64_t)val)
#define QUEUE_POP_BACK(type, queue) ((type *)queue_pop_back(queue))
#define QUEUE_POP_FRONT(type, queue) ((type *)queue_pop_front(queue))