/*!
 	@file 
 	@brief	圧縮・展開アルゴリズムルーチン
 */

#ifndef CCompress_h
#define CCompress_h

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

namespace Maid
{

	/*!
	 	@class	ICompress CCompress.h
	 	@brief	データを圧縮・展開するクラス
	\n			このクラスは基本的に圧縮・展開アルゴリズムだけが記述されているので
	\n			オブジェクトとして持つことはありません
	 */
	class ICompress
	{
	public:
		virtual ~ICompress()=0{};//! デストラクタ

		//! データを圧縮する
		/*!
		 	@param	pSrc		[i ]	圧縮するデータ
		 	@param	SrcLenght	[i ]	pSrcの長さ（バイト単位）
		 	@param	pDst		[i ]	圧縮したデータの出力先( 適切に確保しておくこと）
		 	@param	DstLength	[i ]	pDstの長さ（バイト単位）

		 	@return	圧縮後の長さ（バイト単位）	 
		 */
		virtual unt Encode( const void* pSrc, unt SrcLenght, void* pDst, unt DstLength ) const=0;


		//! データを展開する
		/*!
		 	@param	pSrc		[i ]	展開するデータ
		 	@param	SrcLenght	[i ]	pSrcの長さ（バイト単位）
		 	@param	pDst		[i ]	展開したデータの出力先( 適切に確保しておくこと）
		 	@param	DstLength	[i ]	pDstの長さ（バイト単位）

		 	@return	展開後の長さ（バイト単位）
		 */
		virtual unt Decode( const void* pSrc, unt SrcLenght, void* pDst, unt DstLength ) const=0;
	};

}
#endif
