#ifndef CStorageFunction_h
#define CStorageFunction_h


/*!	
	@file
	@brief	メッセージ処理関数のベース
*/

#include"../Setup/CompileMode.h"
#include"../auxiliary/mstring.h"
#include<boost/smart_ptr.hpp>
#include<boost/function.hpp>
#include<vector>

namespace Maid
{
	//	ストレージスレッドに任意の関数を設定するアレ

	namespace StorageFunction
	{
		class IFunctionParam
		{
		public:
			virtual ~IFunctionParam(){}
		};

		class IReturnParam
		{
		public:
			virtual ~IReturnParam(){}
		};

		/*
			// こうゆう感じで実行される
			SPRETURNPARAM STORAGEFUNCTION( const mstring& FileName, const SPSTORAGEFUNCTION_FUNCTIONPARAM& pParam )
			{
				return SPRETURNPARAM();
			}
		*/
	}

	typedef	boost::shared_ptr<StorageFunction::IFunctionParam>	SPSTORAGEFUNCTION_FUNCTIONPARAM;
	typedef	boost::shared_ptr<StorageFunction::IReturnParam>	SPSTORAGEFUNCTION_RETURNPARAM;
	typedef boost::function2<SPSTORAGEFUNCTION_RETURNPARAM, const mstring&, const SPSTORAGEFUNCTION_FUNCTIONPARAM&>	STORAGEFUNCTION;
}


#endif
