home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classsource.lha / ClassSource / DataStructures / Buffer / buffer.c
Encoding:
C/C++ Source or Header  |  1995-02-12  |  1.9 KB  |  103 lines

  1.  
  2. #include <classes/DataStructures/Buffer.h>
  3.  
  4. #include <exec/memory.h>
  5. #include <string.h>
  6.  
  7. #pragma -
  8. #include <pragma/exec_lib.h>
  9. #pragma +
  10.  
  11. BufferC::BufferC(ULONG initsize)
  12. {
  13.     buffersize = initsize;
  14.     databuffer = AllocMem(buffersize,MEMF_CLEAR);
  15.     if (!databuffer)
  16.         throw MemoryX(buffersize);
  17.     privBuffer = TRUE;
  18. }
  19.  
  20. BufferC::BufferC(APTR buffer, ULONG bufsize)
  21. {
  22.     buffersize = bufsize;
  23.     if (buffer)
  24.     {
  25.         databuffer = buffer;
  26.         privBuffer = FALSE;
  27.     }
  28.     else {
  29.         databuffer = AllocMem(buffersize,MEMF_CLEAR);
  30.         if (!databuffer)
  31.             throw MemoryX(buffersize);
  32.         privBuffer = TRUE;
  33.     };
  34. }
  35.  
  36. BufferC::BufferC(const BufferC &s)
  37. {
  38.     buffersize = s.buffersize;
  39.     databuffer = AllocMem(buffersize,MEMF_CLEAR);
  40.     if (!databuffer)
  41.         throw MemoryX(buffersize);
  42.     memcpy(databuffer,s.databuffer,buffersize);
  43.     privBuffer = TRUE;
  44. }
  45.  
  46. BufferC::~BufferC()
  47. {
  48.     if (privBuffer && databuffer)
  49.     {
  50.         FreeMem(databuffer,buffersize);
  51.     };
  52. }
  53.  
  54. BufferC &BufferC::operator= (const BufferC &s)
  55. {
  56.     if (this != &s)
  57.     {
  58.         if (privBuffer && databuffer)
  59.         {
  60.             FreeMem(databuffer,buffersize);
  61.         };
  62.         buffersize = s.buffersize;
  63.         databuffer = AllocMem(buffersize,MEMF_CLEAR);
  64.         if (!databuffer)
  65.             throw MemoryX(buffersize);
  66.         memcpy(databuffer,s.databuffer,buffersize);
  67.         privBuffer = TRUE;
  68.     };
  69.     return *this;
  70. }
  71.  
  72. VOID BufferC::doubleBuffer()
  73. {
  74.     APTR newbuffer;
  75.     newbuffer = AllocMem(buffersize << 1,MEMF_CLEAR);
  76.     if (!newbuffer)
  77.         throw MemoryX(buffersize << 1);
  78.     memcpy(newbuffer,databuffer,buffersize);
  79.     if (privBuffer)
  80.         FreeMem(databuffer,buffersize);
  81.     buffersize = buffersize << 1;
  82.     databuffer = newbuffer;
  83.     privBuffer = TRUE;
  84. }
  85.  
  86. VOID BufferC::setBufferSize(ULONG newsize)
  87. {
  88.     APTR newbuffer;
  89.     if (newsize == buffersize)
  90.         return;
  91.     newbuffer = AllocMem(newsize,MEMF_CLEAR);
  92.     if (!newbuffer)
  93.         throw MemoryX(newsize);
  94.     memcpy(newbuffer,databuffer,
  95.         newsize > buffersize ? buffersize : newsize);
  96.     if (privBuffer)
  97.         FreeMem(databuffer,buffersize);
  98.     buffersize = newsize;
  99.     databuffer = newbuffer;
  100.     privBuffer = TRUE;
  101. }
  102.  
  103.