/*!
 	@file 
 	@brief	読み込み専用のファイルインターフェース
 */

#ifndef CFileReadInterface_h
#define CFileReadInterface_h

#include"../../Setup/CompileMode.h"

namespace Maid
{
	/*!
	 	@brief	読み込み専用のファイルインターフェース
	\n			各クラスはこのクラスを派生させて実装してあります	 
	 */
	class IFileRead
	{
	public:
		//! デストラクタ
		/*!
		 */
		virtual ~IFileRead() {}	//!<	デストラクタ


		//! ファイルを読み込む
		/*!
		 	@param	pData	[ o]	読込先
		 	@param	Size	[i ]	読み込む長さ（バイト単位）
		 
		 	@return	実際に読み込んだバイト数
		 */
		virtual int		Read( void* pData, int Size )=0;


		//! ファイルサイズの取得
		/*!
		 	@return	ファイルサイズ
		 */
		virtual int		GetSize()    const =0;



		//! 現在のファイルポジションの取得
		/*!
		 	@return	ファイルポジション
		 */
		virtual int		GetPosition()const =0;


		enum POSITION
		{
			POSITION_BEGIN,		//!<	ファイルの先頭から
			POSITION_END,		//!<	ファイルの終端から
			POSITION_CURRENT,	//!<	現在の位置から
		};

		//! ファイルポジションの移動
		/*!
		 	ファイル範囲を超える指定があった場合　範囲内になるようにクリップされる
		 
		 	@param	Size	[i ]	移動量（バイト単位）
		 	@param	ePos	[i ]	移動基準位置		 
		 */
		virtual void	Seek( int Size, POSITION ePos )=0;


		//! 開いているファイルを閉じる
		/*!
		 */
		virtual void Close()=0;


		//! ファイルの末端にいるか？
		/*!
		 	@return 末端なら true
		 */
		bool IsEnd() const { return !(GetPosition() < GetSize()); }
	};



}

#endif
