35 lines
926 B
C
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))
|