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

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #include "buff.hpp"
  5.  
  6.  
  7. ByteBuffer::ByteBuffer(unsigned int _size) {
  8.   buff = new BYTE[_size];
  9.   if (buff) size=_size; else size=0;
  10.   count=0;
  11.   different_bytes=0;
  12.   sort_performed=0;
  13.   memset(bytecount,0,sizeof(bytecount));
  14. }   //ByteBuffer::ByteBuffer(unsigned)
  15.  
  16.  
  17. void ByteBuffer::Add(char*s)
  18. {
  19.   while (*s) Add(*(BYTE*)s++);
  20. }   //ByteBuffer::Add(char*s)
  21.  
  22.  
  23. void ByteBuffer::Add(Alphabet& a,char* s)
  24. {
  25.   while (*s) Add(a,*(BYTE*)s++);
  26. }   //ByteBuffer::Add(Alphabet&,char*)
  27.  
  28.  
  29. int  ByteBuffer::Load(Alphabet& a,char* fn)
  30. {
  31.   FILE* f = fopen(fn,"rb");
  32.   if (f == NULL) return 0;
  33.  
  34.   BYTE b;
  35.   while (fread(&b,1,1,f)) if (a.Inv(b)>=0) Add(b);
  36.   fclose(f);
  37.   return 1;
  38. }   //void ByteBuffer::Load(Alphabet&,char*)
  39.  
  40.  
  41. unsigned int ByteBuffer::Sort(void)
  42. {
  43.   unsigned int diff=0;
  44.   sort_performed=1;
  45.   for (unsigned int i=0;i<0x100;i++) if (bytecount[i]) sorted[diff++]=i;
  46.   different_bytes=diff;
  47.   if (diff<2) return different_bytes;
  48.   diff--;
  49.   i=0;
  50.   while (i<diff) {
  51.     if (bytecount[sorted[i]]<bytecount[sorted[i+1]]) {
  52.       BYTE b=sorted[i];
  53.       sorted[i]=sorted[i+1];
  54.       sorted[i+1]=b;
  55.       if (i) i--; else i++;
  56.     }   //if need to swap
  57.     else
  58.       i++;
  59.   }   //while
  60.   return different_bytes;
  61. }   //ByteBuffer::Sort(void)
  62.  
  63.  
  64.