#include #include #include #include queue_t *make_queue() { queue_t *ret = kmalloc(sizeof(queue_t)); ret->size = 0; ret->begin = kmalloc(sizeof(queue_node_t)); ret->end = kmalloc(sizeof(queue_node_t)); *ret->begin = *ret->end = (queue_node_t){ .prev = (queue_node_t *)ret->begin, .next = (queue_node_t *)ret->end, .value = 0, }; return ret; } uint64_t queue_back(const queue_t *queue) { if (!queue->size) exit(ERR_OUT_OF_BOUND); return queue->end->prev->value; } uint64_t queue_front(const queue_t *queue) { if (!queue->size) exit(ERR_OUT_OF_BOUND); return queue->begin->next->value; } void queue_push_back(queue_t *queue, uint64_t val) { queue->end->value = val; queue->end->next = kmalloc(sizeof(queue_node_t)); *queue->end->next = (queue_node_t){ .prev = queue->end, .next = queue->end->next, .value = 0, }; queue->end = queue->end->next; } void queue_push_front(queue_t *queue, uint64_t val) { queue->begin->value = val; queue->begin->prev = kmalloc(sizeof(queue_node_t)); *queue->begin->prev = (queue_node_t){ .prev = queue->begin->prev, .next = queue->begin, .value = 0, }; queue->begin = queue->begin->prev; }