1
0
mirror of https://github.com/stargieg/bacnet-stack synced 2025-10-26 23:35:52 +08:00
bacnet-stack/ports/dos/queue.c
2013-03-21 22:53:31 +01:00

69 lines
1.8 KiB
C

/*
+----------------------------------------------------+
| Thunderbird Software |
+----------------------------------------------------+
| Filespec : Queue.c |
| Date : September 29, 1994 |
| Time : 10:16AM |
| Revision : 1.0 |
+----------------------------------------------------+
| Programmer: Scott Andrews |
| Address : 5358 Summit RD SW |
| City/State: Pataskala, Ohio |
| Zip : 43062 |
+----------------------------------------------------+
| Released to the Public Domain |
+----------------------------------------------------+
*/
#include <stdlib.h>
#include "queue.h"
QUEUE *alloc_queue(
int size)
{
QUEUE *retval;
retval = (QUEUE *) malloc(sizeof(QUEUE) + (size_t) size);
if ((QUEUE *) 0 != retval) {
retval->size = size;
retval->head = 0;
retval->tail = 0;
retval->avail = size;
retval->buffer = ((char *) retval) + sizeof(QUEUE);
}
return retval;
}
int en_queue(
QUEUE * queue,
char data)
{
int retval = -1;
if (0 != queue->avail) {
*(queue->buffer + queue->head) = data;
queue->head += 1;
if (queue->head == queue->size)
queue->head = 0;
queue->avail -= 1;
retval = queue->avail;
}
return retval;
}
int de_queue(
QUEUE * queue)
{
int retval = -1;
if (queue->avail != queue->size) {
retval = *(queue->buffer + queue->tail);
queue->tail += 1;
if (queue->tail == queue->size)
queue->tail = 0;
queue->avail += 1;
}
return retval;
}
/* End of Queue.c */