#ifndef APE_IO_H
#define APE_IO_H

#ifndef FILE_BEGIN
	#define FILE_BEGIN		0
#endif

#ifndef FILE_CURRENT
	#define FILE_CURRENT	1
#endif

#ifndef FILE_END
	#define FILE_END		2
#endif

class CIO
{
	
public:

	//construction / destruction
	CIO() { }
	virtual ~CIO() { };

	// open / close
	virtual int Open(const wchar_t * pName) = 0;
	virtual int Close() = 0;
	
	// read / write
	virtual int Read(void * pBuffer, unsigned int nBytesToRead, unsigned int * pBytesRead) = 0;
	virtual int Write(const void * pBuffer, unsigned int nBytesToWrite, unsigned int * pBytesWritten) = 0;
	
	// seek
	virtual int Seek(int nDistance, unsigned int nMoveMode) = 0;
	
	// creation / destruction
	virtual int Create(const wchar_t * pName) = 0;
	virtual int Delete() = 0;

	// other functions
	virtual int SetEOF() = 0;

	// attributes
	virtual int GetPosition() = 0;
	virtual int GetSize() = 0;
	virtual int GetName(wchar_t * pBuffer) = 0;
};

#endif // #ifndef APE_IO_H
