Annotation of previous/src/queue.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *          File: queue.c
                      3:  *        Author: Robert I. Pitts <[email protected]>
                      4:  * Last Modified: March 9, 2000
                      5:  *         Topic: Queue - Array Implementation
                      6:  * ----------------------------------------------------------------
                      7:  */
                      8: 
                      9: #include <stdio.h>
                     10: #include <stdlib.h>                  
                     11: #include "queue.h"       
                     12: 
                     13: /*
                     14:  * Constants
                     15:  * ---------
                     16:  * MAX_QUEUE_SIZE = Largest number of items queue can hold.
                     17:  */
                     18: 
                     19: #define MAX_QUEUE_SIZE  100
                     20: 
                     21: /*
                     22:  * struct queueCDT gives the implementation of a queue.
                     23:  * It holds the information that we need for each queue.
                     24:  */
                     25: typedef struct queueCDT {
                     26:   queueElementT contents[MAX_QUEUE_SIZE];
                     27:   int front;
                     28:   int count;
                     29: } queueCDT;
                     30: 
                     31: queueADT QueueCreate(void)
                     32: {
                     33:   queueADT queue;
                     34: 
                     35:   queue = (queueADT)malloc(sizeof(queueCDT));
                     36: 
                     37:   if (queue == NULL) {
                     38:     fprintf(stderr, "Insufficient Memory for new Queue.\n");
                     39:     exit(ERROR_MEMORY);  /* Exit program, returning error code. */
                     40:   }
                     41: 
                     42:   queue->front = 0;
                     43:   queue->count = 0;
                     44: 
                     45:   return queue;
                     46: }
                     47: 
                     48: void QueueDestroy(queueADT queue)
                     49: {
                     50:   free(queue);
                     51: }
                     52: 
                     53: void QueueEnter(queueADT queue, queueElementT element)
                     54: {
                     55:   int newElementIndex;
                     56: 
                     57:   if (queue->count >= MAX_QUEUE_SIZE) {
                     58: //    fprintf(stderr, "QueueEnter on Full Queue.\n");
                     59: //    exit(ERROR_QUEUE);  /* Exit program, returning error code. */
                     60:        return;
                     61:   }
                     62: 
                     63:   /*
                     64:    * Calculate index at which to put
                     65:    * next element.
                     66:    */
                     67:   newElementIndex = (queue->front + queue->count)
                     68:                     % MAX_QUEUE_SIZE;
                     69:   queue->contents[newElementIndex] = element;
                     70: //printf("element %d, pointer to %d, [%s]\n",newElementIndex,element,element);
                     71: 
                     72:   queue->count++;
                     73: }
                     74: 
                     75: int QueuePeek(queueADT queue)
                     76: {
                     77: return queue->count;
                     78: }
                     79: 
                     80: queueElementT QueueDelete(queueADT queue)
                     81: {
                     82:   queueElementT oldElement;
                     83: 
                     84:   if (queue->count <= 0) {
                     85:     //fprintf(stderr, "QueueDelete on Empty Queue.\n");
                     86:     //exit(ERROR_QUEUE);  /* Exit program, returning error code. */
                     87:        return NULL;
                     88:   }
                     89: 
                     90:   /* Save the element so we can return it. */
                     91:   oldElement = queue->contents[queue->front];
                     92: 
                     93:   /*
                     94:    * Advance the index of the front,
                     95:    * making sure it wraps around the
                     96:    * array properly.
                     97:    */
                     98:   queue->front++;
                     99:   queue->front %= MAX_QUEUE_SIZE;
                    100:        
                    101: //printf("dequing @%d [%s]\n",oldElement,oldElement);
                    102: 
                    103:   queue->count--;
                    104: 
                    105:   return oldElement;
                    106: }
                    107: 
                    108: int QueueIsEmpty(queueADT queue)
                    109: {
                    110:   return queue->count <= 0;
                    111: }
                    112: 
                    113: int QueueIsFull(queueADT queue)
                    114: {
                    115:   return queue->count >= MAX_QUEUE_SIZE;
                    116: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.