home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / CPPCOM17.ZIP / CHARQUEU.CPP < prev    next >
C/C++ Source or Header  |  1991-02-27  |  2KB  |  100 lines

  1. /***************************************************************************
  2. These C++ classes are copyright 1990, by William Herrera.
  3. All those who put this code or its derivatives in a commercial product MUST
  4. mention this copyright in their documentation for users of the products in
  5. which this code or its derivative classes are used.  Otherwise, this code
  6. may be freely distributed and freely used for any purpose.
  7. ***************************************************************************/
  8.  
  9. // file charqueu.cpp class definitions for CharQueue class.
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13.  
  14. #include "CharQueu.hpp"
  15.  
  16. static const char mem_out_err[] = "CharQueue error:  Out of memory";
  17.  
  18. CharQueue::CharQueue(unsigned int bufsize) 
  19. {
  20.     size = bufsize;
  21.     count = 0;
  22.     queue_buffer = new char[size];
  23.     if(queue_buffer == NULL)
  24.     {
  25.         fputs(mem_out_err, stderr);
  26.         exit(-1);
  27.     }
  28.     add_position = 0;
  29.     get_position = 0;    // get_position chases add_position
  30. }
  31.  
  32. CharQueue::~CharQueue() 
  33.     delete queue_buffer; 
  34. }
  35.  
  36. void CharQueue::Purge() 
  37.     count = 0; 
  38.     add_position = 0; 
  39.     get_position = 0; 
  40. }
  41.  
  42. unsigned int CharQueue::GetCount() 
  43.     return count; 
  44. }
  45.  
  46. boolean CharQueue::IsFull()    
  47.     return (count == size) ? true : false; 
  48. }
  49.  
  50. boolean CharQueue::IsEmpty() 
  51.     return (count == 0) ? true : false; 
  52. }
  53.  
  54. int CharQueue::Add(char ch) 
  55. {
  56.     if(count == size)
  57.     {
  58.         fputs(mem_out_err, stderr);
  59.         return 1;                    // return 1 for error
  60.     }
  61.     else
  62.     {
  63.         ++count;
  64.         queue_buffer[add_position] = ch;
  65.         ++add_position;
  66.         if(add_position == size)        // end of queue memory
  67.             add_position = 0;        // so wrap to bottom 
  68.         return 0;                    // return 0 for success
  69.     }
  70. }
  71.  
  72. int CharQueue::Get()
  73. {
  74.     // remove and return next char in line.
  75.     int ch = -1;                    // -1 return for empty queue
  76.     if(count > 0)
  77.     {
  78.         count--;
  79.         ch = queue_buffer[get_position] & 0xFF;
  80.         ++get_position;
  81.         if(get_position == size)
  82.             get_position = 0;        // wrap to bottom
  83.     }
  84.     return ch;
  85. }
  86.  
  87. int CharQueue::Peek()
  88. {
  89.     // return current character but don't remove from buffer.
  90.     return (count > 0) ? queue_buffer[get_position] & 0xFF : -1;
  91. }
  92.  
  93.  
  94. // end of file CharQueu.cpp
  95.