Feat: kernel thread done
This commit is contained in:
@@ -6,9 +6,11 @@
|
||||
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 = (queue_t){
|
||||
.size = 0,
|
||||
.begin = kmalloc(sizeof(queue_node_t)),
|
||||
.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,
|
||||
@@ -42,6 +44,7 @@ void queue_push_back(queue_t *queue, uint64_t val)
|
||||
.value = 0,
|
||||
};
|
||||
queue->end = queue->end->next;
|
||||
++queue->size;
|
||||
}
|
||||
|
||||
void queue_push_front(queue_t *queue, uint64_t val)
|
||||
@@ -54,4 +57,31 @@ void queue_push_front(queue_t *queue, uint64_t val)
|
||||
.value = 0,
|
||||
};
|
||||
queue->begin = queue->begin->prev;
|
||||
++queue->size;
|
||||
}
|
||||
|
||||
uint64_t queue_pop_back(queue_t *queue)
|
||||
{
|
||||
if (!queue->size)
|
||||
exit(ERR_OUT_OF_BOUND);
|
||||
|
||||
uint64_t ret = queue->end->prev->value;
|
||||
queue->end->prev = queue->end->prev->prev;
|
||||
queue->end->prev->next = queue->end;
|
||||
|
||||
--queue->size;
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint64_t queue_pop_front(queue_t *queue)
|
||||
{
|
||||
if (!queue->size)
|
||||
exit(ERR_OUT_OF_BOUND);
|
||||
|
||||
uint64_t ret = queue->begin->next->value;
|
||||
queue->begin->next = queue->begin->next->next;
|
||||
queue->begin->next->prev = queue->begin;
|
||||
|
||||
--queue->size;
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user