home *** CD-ROM | disk | FTP | other *** search
-
- #include <classes/DataStructures/Buffer.h>
-
- #include <exec/memory.h>
- #include <string.h>
-
- #pragma -
- #include <pragma/exec_lib.h>
- #pragma +
-
- BufferC::BufferC(ULONG initsize)
- {
- buffersize = initsize;
- databuffer = AllocMem(buffersize,MEMF_CLEAR);
- if (!databuffer)
- throw MemoryX(buffersize);
- privBuffer = TRUE;
- }
-
- BufferC::BufferC(APTR buffer, ULONG bufsize)
- {
- buffersize = bufsize;
- if (buffer)
- {
- databuffer = buffer;
- privBuffer = FALSE;
- }
- else {
- databuffer = AllocMem(buffersize,MEMF_CLEAR);
- if (!databuffer)
- throw MemoryX(buffersize);
- privBuffer = TRUE;
- };
- }
-
- BufferC::BufferC(const BufferC &s)
- {
- buffersize = s.buffersize;
- databuffer = AllocMem(buffersize,MEMF_CLEAR);
- if (!databuffer)
- throw MemoryX(buffersize);
- memcpy(databuffer,s.databuffer,buffersize);
- privBuffer = TRUE;
- }
-
- BufferC::~BufferC()
- {
- if (privBuffer && databuffer)
- {
- FreeMem(databuffer,buffersize);
- };
- }
-
- BufferC &BufferC::operator= (const BufferC &s)
- {
- if (this != &s)
- {
- if (privBuffer && databuffer)
- {
- FreeMem(databuffer,buffersize);
- };
- buffersize = s.buffersize;
- databuffer = AllocMem(buffersize,MEMF_CLEAR);
- if (!databuffer)
- throw MemoryX(buffersize);
- memcpy(databuffer,s.databuffer,buffersize);
- privBuffer = TRUE;
- };
- return *this;
- }
-
- VOID BufferC::doubleBuffer()
- {
- APTR newbuffer;
- newbuffer = AllocMem(buffersize << 1,MEMF_CLEAR);
- if (!newbuffer)
- throw MemoryX(buffersize << 1);
- memcpy(newbuffer,databuffer,buffersize);
- if (privBuffer)
- FreeMem(databuffer,buffersize);
- buffersize = buffersize << 1;
- databuffer = newbuffer;
- privBuffer = TRUE;
- }
-
- VOID BufferC::setBufferSize(ULONG newsize)
- {
- APTR newbuffer;
- if (newsize == buffersize)
- return;
- newbuffer = AllocMem(newsize,MEMF_CLEAR);
- if (!newbuffer)
- throw MemoryX(newsize);
- memcpy(newbuffer,databuffer,
- newsize > buffersize ? buffersize : newsize);
- if (privBuffer)
- FreeMem(databuffer,buffersize);
- buffersize = newsize;
- databuffer = newbuffer;
- privBuffer = TRUE;
- }
-
-