1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
// --------------------------------------------------------------------------
//
// File
// Name: StreamableMemBlock.h
// Purpose: Memory blocks which can be loaded and saved from streams,
// with a header indicating the size of the block.
// Created: 2003/09/05
//
// --------------------------------------------------------------------------
#ifndef STREAMABLEMEMBLOCK__H
#define STREAMABLEMEMBLOCK__H
class IOStream;
// --------------------------------------------------------------------------
//
// Class
// Name: StreamableMemBlock
// Purpose: Memory blocks which can be loaded and saved from streams
// Created: 2003/09/05
//
// --------------------------------------------------------------------------
class StreamableMemBlock
{
public:
StreamableMemBlock();
StreamableMemBlock(int Size);
StreamableMemBlock(void *pBuffer, int Size);
StreamableMemBlock(const StreamableMemBlock &rToCopy);
~StreamableMemBlock();
void Set(const StreamableMemBlock &rBlock);
void Set(void *pBuffer, int Size);
void Set(IOStream &rStream, int Timeout);
StreamableMemBlock &operator=(const StreamableMemBlock &rBlock)
{
Set(rBlock);
return *this;
}
void ReadFromStream(IOStream &rStream, int Timeout);
void WriteToStream(IOStream &rStream) const;
static void WriteEmptyBlockToStream(IOStream &rStream);
void *GetBuffer() const;
// Size of block
int GetSize() const {return mSize;}
// Buffer empty?
bool IsEmpty() const {return mSize == 0;}
// Clear the contents of the block
void Clear() {FreeBlock();}
bool operator==(const StreamableMemBlock &rCompare) const;
void ResizeBlock(int Size);
protected: // be careful with these!
void AllocateBlock(int Size);
void FreeBlock();
private:
void *mpBuffer;
int mSize;
};
#endif // STREAMABLEMEMBLOCK__H
|