// класс или набор классов для работы с файлами.
// Базовый класс обеспечивает работу с файлом, как через WinAPI в традиционном стиле, так и memory-mapped доступ.
// возможно, в дальнейшем, по мере анализа, добавится возможность работы с асинхронным вводом-выводом
// либо в этот класс, либо в порожденный сабкласс

// NOTE: этот класс пока стоит рассматривать, скорее, как заглушку
//	после того, как будет сформировано четкое представление о работе с файлами, 
//	скорее всего, будет сформирована целая иерархия для разных методов работы с данными

class CFile {
public:
	CFile (TCHAR * name);
	~CFile ();

	const BYTE *	getPtr () const { return ptr; } 
	const DWORD		getLength () const { return length; }
	void	closeFile ();	// unmap (if necessary) and close file
	bool	reopenFile (TCHAR * name);	// close opened file and open another. Warning! Invalidated map pointer
	BYTE *	mapFile ();		// map all file, read-only
	void	unmapFile ();	// as is		
	

protected:
	HANDLE	file;	// file handle. INVALID_FILE_VALUE - file not opened
	DWORD	length;	// file length in bytes
	HANDLE	map;
	BYTE *	ptr;
};