mirror of
https://github.com/86Box/86Box.git
synced 2026-02-26 14:03:16 -07:00
Added the ability to set sound to use STEREO16 format instead of STEREO_FLOAT32 (defaults to STEREO_FLOAT32);
Moved network-related files to their own subdirectory.
This commit is contained in:
116
src/NETWORK/slirp/queue.c
Normal file
116
src/NETWORK/slirp/queue.c
Normal file
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* File: queue.c
|
||||
* Author: Robert I. Pitts <rip@cs.bu.edu>
|
||||
* Last Modified: March 9, 2000
|
||||
* Topic: Queue - Array Implementation
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "queue.h"
|
||||
|
||||
/*
|
||||
* Constants
|
||||
* ---------
|
||||
* MAX_QUEUE_SIZE = Largest number of items queue can hold.
|
||||
*/
|
||||
|
||||
#define MAX_QUEUE_SIZE 100
|
||||
|
||||
/*
|
||||
* struct queueCDT gives the implementation of a queue.
|
||||
* It holds the information that we need for each queue.
|
||||
*/
|
||||
typedef struct queueCDT {
|
||||
queueElementT contents[MAX_QUEUE_SIZE];
|
||||
int front;
|
||||
int count;
|
||||
} queueCDT;
|
||||
|
||||
queueADT QueueCreate(void)
|
||||
{
|
||||
queueADT queue;
|
||||
|
||||
queue = (queueADT)malloc(sizeof(queueCDT));
|
||||
|
||||
if (queue == NULL) {
|
||||
fprintf(stderr, "Insufficient Memory for new Queue.\n");
|
||||
exit(ERROR_MEMORY); /* Exit program, returning error code. */
|
||||
}
|
||||
|
||||
queue->front = 0;
|
||||
queue->count = 0;
|
||||
|
||||
return queue;
|
||||
}
|
||||
|
||||
void QueueDestroy(queueADT queue)
|
||||
{
|
||||
free(queue);
|
||||
}
|
||||
|
||||
void QueueEnter(queueADT queue, queueElementT element)
|
||||
{
|
||||
int newElementIndex;
|
||||
|
||||
if (queue->count >= MAX_QUEUE_SIZE) {
|
||||
// fprintf(stderr, "QueueEnter on Full Queue.\n");
|
||||
// exit(ERROR_QUEUE); /* Exit program, returning error code. */
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate index at which to put
|
||||
* next element.
|
||||
*/
|
||||
newElementIndex = (queue->front + queue->count)
|
||||
% MAX_QUEUE_SIZE;
|
||||
queue->contents[newElementIndex] = element;
|
||||
//printf("element %d, pointer to %d, [%s]\n",newElementIndex,element,element);
|
||||
|
||||
queue->count++;
|
||||
}
|
||||
|
||||
int QueuePeek(queueADT queue)
|
||||
{
|
||||
return queue->count;
|
||||
}
|
||||
|
||||
queueElementT QueueDelete(queueADT queue)
|
||||
{
|
||||
queueElementT oldElement;
|
||||
|
||||
if (queue->count <= 0) {
|
||||
//fprintf(stderr, "QueueDelete on Empty Queue.\n");
|
||||
//exit(ERROR_QUEUE); /* Exit program, returning error code. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Save the element so we can return it. */
|
||||
oldElement = queue->contents[queue->front];
|
||||
|
||||
/*
|
||||
* Advance the index of the front,
|
||||
* making sure it wraps around the
|
||||
* array properly.
|
||||
*/
|
||||
queue->front++;
|
||||
queue->front %= MAX_QUEUE_SIZE;
|
||||
|
||||
//printf("dequing @%d [%s]\n",oldElement,oldElement);
|
||||
|
||||
queue->count--;
|
||||
|
||||
return oldElement;
|
||||
}
|
||||
|
||||
int QueueIsEmpty(queueADT queue)
|
||||
{
|
||||
return queue->count <= 0;
|
||||
}
|
||||
|
||||
int QueueIsFull(queueADT queue)
|
||||
{
|
||||
return queue->count >= MAX_QUEUE_SIZE;
|
||||
}
|
||||
Reference in New Issue
Block a user