#pragma once

//! @file Mix/IO/IStream.h
//! @brief ストリームインターフェースインクルードファイル

#include "Mix/Reference.h"

namespace Mix{ namespace IO{

	//! @class IStream
	//! @brief ストリームインターフェース
	class IStream : public Mix::Reference
	{
	public:
		//! @enum ACCESS_TYPE
		//! @brief アクセスタイプ列挙定数
		enum ACCESS_TYPE
		{
			A_READ	= 0,	//!< 読み込み
			A_WRITE	= 1,	//!< 書き込み
		};

		//! @enum SOURCE_TYPE
		//! @brief ソースタイプ列挙定数
		enum SOURCE_TYPE
		{
			S_FILE	= 0,		//!< ファイル
			S_BUFFER	= 1,	//!< バッファー
		};

	protected:
		//! @brief デストラクタ
		virtual ~IStream( void ) {}

	public:
		//! @brief アクセスタイプを取得します
		//! @return アクセスタイプを表す Mix::IO::IStream::ACCESS_TYPE 列挙定数
		virtual Mix::IO::IStream::ACCESS_TYPE GetAccessType( void ) const = 0;
		//! @brief ソースタイプを取得します
		//! @return ソースタイプを表す Mix::IO::IStream::SOURCE_TYPE 列挙定数
		virtual Mix::IO::IStream::SOURCE_TYPE GetSourceType( void ) const = 0;
	};

}}
