kosmos/source/firmware/kernel/queue.c
2016-07-28 21:02:54 +02:00

65 lines
923 B
C

/*
* queue.c
*
* Created on: Oct 25, 2015
* Author: tkl
*/
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#include "queue.h"
int queue_init(struct queue *head)
{
if(NULL == head)
return -1;
head->front = NULL;
head->rear = NULL;
return 0;
}
int queue_push(struct queue *head, struct queue_node *node)
{
if((NULL == head) || (NULL == node))
return -1;
if(head->front == NULL) {
head->front = node;
head->rear = node;
}
else {
head->rear->next = node;
head->rear = node;
}
return 1;
}
int queue_pop(struct queue *head, struct queue_node *node)
{
if(NULL == head)
return -1;
if(head->front == NULL)
return 0;
else {
memcpy(node, head->front, sizeof(struct queue_node));
head->front = node->next;
return 1;
}
return 0;
}
bool queue_is_empty(struct queue *head)
{
if(NULL == head)
return false;
if(head->front == NULL)
return true;
return false;
}