xmemfile.h
上传用户:gnaf34
上传日期:2022-04-22
资源大小:1657k
文件大小:2k
- #if !defined(__xmemfile_h)
- #define __xmemfile_h
- #include "xfile.h"
- //////////////////////////////////////////////////////////
- class DLL_EXP CxMemFile : public CxFile
- {
- public:
- CxMemFile(BYTE* pBuffer = NULL, DWORD size = 0)
- {
- m_pBuffer = pBuffer;
- m_Position = 0;
- m_Size = m_Edge = size;
- m_bFreeOnClose = (bool)(pBuffer==0);
- }
- //////////////////////////////////////////////////////////
- ~CxMemFile()
- {
- Close();
- }
- //////////////////////////////////////////////////////////
- virtual bool Close()
- {
- if ( (m_pBuffer) && (m_bFreeOnClose) ){
- free(m_pBuffer);
- m_pBuffer = NULL;
- m_Size = 0;
- }
- return true;
- }
- //////////////////////////////////////////////////////////
- bool Open()
- {
- if (m_pBuffer) return false; // Can't re-open without closing first
- m_Position = m_Size = m_Edge = 0;
- m_pBuffer=(BYTE*)malloc(0);
- m_bFreeOnClose = true;
- return (m_pBuffer!=0);
- }
- //////////////////////////////////////////////////////////
- BYTE* GetBuffer() { m_bFreeOnClose = false; return m_pBuffer;}
- //////////////////////////////////////////////////////////
- virtual size_t Read(void *buffer, size_t size, size_t count);
- virtual size_t Write(const void *buffer, size_t size, size_t count);
- virtual bool Seek(long offset, int origin);
- virtual long Tell();
- virtual long Size();
- virtual bool Flush();
- virtual bool Eof();
- virtual long Error();
- virtual bool PutC(unsigned char c);
- virtual long GetC();
- protected:
- void Alloc(DWORD nBytes);
- void Free();
- protected:
- BYTE* m_pBuffer;
- DWORD m_Size;
- bool m_bFreeOnClose;
- long m_Position; //current position
- long m_Edge; //buffer size
- };
- #endif