NptDataBuffer.h

00001 /*****************************************************************
00002 |
00003 |   Neptune - Datagram Packets
00004 |
00005 |   (c) 2001-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00009 
00010 #ifndef _NPT_DATA_BUFFER_H_
00011 #define _NPT_DATA_BUFFER_H_
00012 
00013 /*----------------------------------------------------------------------
00014 |   includes
00015 +---------------------------------------------------------------------*/
00016 #include "NptTypes.h"
00017 #include "NptConstants.h"
00018 
00019 /*----------------------------------------------------------------------
00020 |   NPT_DataBuffer
00021 +---------------------------------------------------------------------*/
00022 class NPT_DataBuffer 
00023 {
00024  public:
00025     // constructors & destructor
00026     NPT_DataBuffer();              // size unknown until first set 
00027     NPT_DataBuffer(NPT_Size size); // initial size specified
00028     NPT_DataBuffer(const void* data, NPT_Size size, bool copy = true); // initial data and size specified
00029     NPT_DataBuffer(const NPT_DataBuffer& other);
00030     virtual ~NPT_DataBuffer();
00031 
00032     // operators
00033     NPT_DataBuffer& operator=(const NPT_DataBuffer& copy);
00034     bool            operator==(const NPT_DataBuffer& other) const;
00035 
00036     // data buffer handling methods
00037     virtual NPT_Result SetBuffer(NPT_Byte* buffer, NPT_Size bufferSize);
00038     virtual NPT_Result SetBufferSize(NPT_Size bufferSize);
00039     virtual NPT_Size   GetBufferSize() const { return m_BufferSize; }
00040     virtual NPT_Result Reserve(NPT_Size size);
00041 
00042     // data handling methods
00043     virtual const NPT_Byte* GetData() const { return m_Buffer; }
00044     virtual NPT_Byte*       UseData() { return m_Buffer; };
00045     virtual NPT_Size        GetDataSize() const { return m_DataSize; }
00046     virtual NPT_Result      SetDataSize(NPT_Size size);
00047     virtual NPT_Result      SetData(const NPT_Byte* data, NPT_Size dataSize);
00048 
00049  private:
00050     NPT_Result Clear();
00051 
00052  protected:
00053     // members
00054     bool      m_BufferIsLocal;
00055     NPT_Byte* m_Buffer;
00056     NPT_Size  m_BufferSize;
00057     NPT_Size  m_DataSize;
00058 
00059     // methods
00060     NPT_Result ReallocateBuffer(NPT_Size size);
00061 };
00062 
00063 #endif // _NPT_DATA_BUFFER_H_