home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / BUFF.HPP < prev    next >
C/C++ Source or Header  |  1991-10-12  |  1KB  |  54 lines

  1. #ifndef __BUFF_HPP
  2. #define __BUFF_HPP
  3.  
  4.  
  5. #include "alphabet.hpp"
  6.  
  7.  
  8. #ifndef BYTE
  9. #define BYTE unsigned char
  10. #endif
  11.  
  12.  
  13. class ByteBuffer {
  14. protected:
  15.   BYTE *buff;
  16.   unsigned int bytecount[0x100];
  17.   BYTE sorted[0x100];
  18.   unsigned int different_bytes;
  19.   unsigned int size;
  20.   unsigned int count;
  21.   char sort_performed;
  22. public:
  23.   ByteBuffer(unsigned int _size=0x4000);
  24.   ~ByteBuffer() { if (buff) delete buff; }
  25.   void Add(BYTE b) {
  26.     if (count<size) {
  27.       buff[count++]=b;
  28.       if (!bytecount[b]++) different_bytes++;
  29.       sort_performed=0;
  30.     }  //if room
  31.   }
  32.   void Add(Alphabet& a,BYTE b) { if (a.Inv(b) != -1) Add(b); }
  33.   void Add(char*s);
  34.   void Add(Alphabet& a,char* s);
  35.   int  Load(Alphabet& a,char* fn);
  36.   unsigned int Count(void) { return count; }
  37.   unsigned int Count(int k) {
  38.     if ((k<0)||(k>0xFF)) return 0; else return bytecount[k];
  39.   }
  40.   BYTE Byte(int k) { if ((k<0)||(k>count)) return 0; else return buff[k]; }
  41.   BYTE operator[](int k) {
  42.     if ((k<0)||(k>count)) return 0; else return buff[k];
  43.   }
  44.   unsigned int Sort(void);             //returns different_bytes
  45.   unsigned int Different(void) { return different_bytes; }
  46.   BYTE SortedByte(int k) {
  47.     if (!sort_performed) Sort();
  48.     if ((k<0)||(k>count)) return 0; else return sorted[k];
  49.   }
  50. };   //class ByteBuffer
  51.  
  52.  
  53. #endif
  54.