#ifndef __MemFileEx_h
#define __MemFileEx_h

#ifdef SUPER_CLASS
#undef SUPER_CLASS
#endif
#define SUPER_CLASS CMemFile

/*************************************************************************
 * <_xZkqqHx_iDeOiDiJiDfI_xHqqkZx_>	CFCMemFileEx
 *
 * <_xZkqqHx_iLeAjEfM_xHqqkZx_>	CMemFile_xZkqqHx_iCmM_xHqqkZx_Alloc_xZkqqHx_iCmG_xHqqkZx_Free_xZkqqHx_iCpA_xHqqkZx_public_xZkqqHx_iJlLiClFiBeBiDiBiDiCiDiKiBfLiCmMjBhNjDpMiCpAiJmCjEfMiCmJiClHiCoJiBeC_xHqqkZx_
 *
 * <_xZkqqHx_jHjKjHpA_xHqqkZx_>	06.11.16 Fukushiro M. _xZkqqHx_iDfCiDiBiDjDiDgHiNoMjAkM_xHqqkZx_
 *************************************************************************/
class CFCMemFileEx : public SUPER_CLASS
{
protected:
typedef SUPER_CLASS BASE_CLASS;

public:
	CFCMemFileEx (UINT nGrowBytes = 1024);
	CFCMemFileEx (	BYTE* lpBuffer,
					UINT nBufferSize,
					UINT nGrowBytes = 0);
	virtual void	Insert (flint fliInsPos, const void* lpBuff, flint fliCount);
	virtual BYTE*	Alloc (SIZE_T nBytes);
	virtual void	Free (BYTE* lpMem);
}; // class CFCMemFileEx.

template<class T> void operator << (CFCMemFileEx& file, const T data)
{
	file.Write(&data, sizeof(data));
} // template<class T> void operator <<.

template<class T> void operator >> (CFCMemFileEx& file, T& data)
{
	file.Read(&data, sizeof(data));
} // template<class T> void operator >>.

#endif//__MemFileEx_h

