www.pudn.com > H323BeaconClient-v1.4_win_src.zip > xmemfile.h, change:2003-10-09,size:1697b


#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