home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / snippets / queue.c < prev    next >
C/C++ Source or Header  |  1995-03-13  |  2KB  |  62 lines

  1. /*
  2. +----------------------------------------------------+
  3. |               Thunderbird Software                 |
  4. +----------------------------------------------------+
  5. | Filespec  :  Queue.c                               |
  6. | Date      :  September 29, 1994                    |
  7. | Time      :  10:16AM                               |
  8. | Revision  :  1.0                                   |
  9. +----------------------------------------------------+
  10. | Programmer:  Scott Andrews                         |
  11. | Address   :  5358 Summit RD SW                     |
  12. | City/State:  Pataskala, Ohio                       |
  13. | Zip       :  43062                                 |
  14. +----------------------------------------------------+
  15. | Released to the Public Domain                      |
  16. +----------------------------------------------------+
  17. */
  18.  
  19. #include <stdlib.h>
  20.  
  21. #include "queue.h"
  22.  
  23. QUEUE *alloc_queue( int size)
  24. { QUEUE *retval;
  25.   retval = (QUEUE *) malloc( sizeof( QUEUE) + (size_t) size);
  26.   if ( (QUEUE *) 0 != retval)
  27.   {  retval->size = size;
  28.      retval->head = 0;
  29.      retval->tail = 0;
  30.      retval->avail = size;
  31.      retval->buffer = ( (char *) retval) + sizeof( QUEUE);
  32.   }
  33.   return retval;
  34. }
  35.  
  36. int en_queue( QUEUE *queue, char data)
  37. { int retval = -1;
  38.   if ( 0 != queue->avail)
  39.   {  *( queue->buffer + queue->head) = data;
  40.      queue->head += 1;
  41.      if ( queue->head == queue->size)
  42.         queue->head = 0;
  43.      queue->avail -= 1;
  44.      retval = queue->avail;
  45.   }
  46.   return retval;
  47. }
  48.  
  49. int de_queue( QUEUE *queue)
  50. { int retval = -1;
  51.   if ( queue->avail != queue->size)
  52.   {  retval = *( queue->buffer + queue->tail);
  53.      queue->tail += 1;
  54.      if ( queue->tail == queue->size)
  55.         queue->tail = 0;
  56.      queue->avail += 1;
  57.   }
  58.   return retval;
  59. }
  60.  
  61. /* End of Queue.c */
  62.