home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / basq / dualmodp / queue.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-09  |  2.1 KB  |  94 lines

  1. // ************************************************************************
  2. // *
  3. // *    File        : QUEUE.C
  4. // *
  5. // *    Description : Defines a queue object
  6. // *
  7. // *    Copyright (C) 1993 Otto Chrons
  8. // *
  9. // ************************************************************************
  10.  
  11. #include <malloc.h>
  12. #include <mem.h>
  13. #include "queue.h"
  14.  
  15.  
  16. Queue *CreateQueue(void)
  17. {
  18.         Queue   *q;
  19.  
  20.     q = malloc(sizeof(Queue));
  21.     q->firstItem = q->lastItem = NULL;
  22.     return q;
  23. }
  24.  
  25. void DestroyQueue( Queue *q )
  26. {
  27.         QueueItem       *item, *item2;
  28.  
  29.         if( !q ) return;
  30.     item = q->firstItem;
  31.     while( item != NULL )
  32.     {
  33.         item2 = item->next;
  34.                 if(item->data) free(item->data);
  35.         free(item);
  36.         item = item2;
  37.     }
  38.     free(q);
  39. }
  40.  
  41. void InsertQueueTop( Queue *q, void *data )
  42. {
  43.         QueueItem       *item = malloc(sizeof(QueueItem));
  44.  
  45.         if( !q ) return;
  46.     if( !item ) return;
  47.         item->next = q->firstItem;
  48.     q->firstItem = item;
  49.     if( q->lastItem == NULL ) q->lastItem = item;
  50.     item->data = data;
  51. }
  52.  
  53. void InsertQueueBottom( Queue *q, void *data )
  54. {
  55.         QueueItem       *item = malloc(sizeof(QueueItem));
  56.  
  57.         if( !q ) return;
  58.     if( !item ) return;
  59.         item->next = NULL;
  60.     if( q->firstItem == NULL )
  61.         {
  62.                 q->firstItem = q->lastItem = item;
  63.     } else
  64.     {
  65.         q->lastItem->next = item;
  66.         q->lastItem = item;
  67.     }
  68.     item->data = data;
  69. }
  70.  
  71. void *GetQueueItem( Queue *q )
  72. {
  73.         void            *data;
  74.         QueueItem       *item;
  75.  
  76.         if( !q || !q->firstItem ) return NULL;
  77.         data = q->firstItem->data;
  78.     item = q->firstItem->next;
  79.     free(q->firstItem);
  80.     if((q->firstItem = item) == NULL) q->lastItem = NULL;
  81.         return data;
  82. }
  83.  
  84. int SearchQueueItem( Queue *q, void *data, int dataSize )
  85. {
  86.         QueueItem       *item;
  87.  
  88.         if( !q ) return 0;
  89.     item = q->firstItem;
  90.     while( item && memcmp(data,item->data,dataSize) != 0 ) item = item->next;
  91.     if( item ) return 1;
  92.         else return 0;
  93. }
  94.