#pragma once
namespace nlite{

	///
	///nlite例外処理クラス
	///
	class Exception:public std::exception{
		
	private:
		CNLiteString  wErrMessage;
		UINT_PTR line;
		CNLiteString fileName;
		CNLiteString function;

		
	public:
		///
		///コンストラクタ
		///
		Exception();
		Exception(const char* const& errMessage);
		Exception(const wchar_t * const & errMessage,UINT_PTR in_line,LPCTSTR in_fileName,LPCTSTR in_function);
		
		
		///
		///エラー文言取得
		///
		LPCTSTR what();


		///
		///エラー発生行取得
		///
		UINT_PTR getLineNo();

		///
		///エラー発生ファイル名取得
		///
		LPCTSTR getFileName();


		///
		///エラー発生関数名を取得
		///
		LPCTSTR getFunctionName();

	};

	///
	///アプリケーション初期化例外クラス
	///
	class AppInitException : public Exception{

	public:
		///
		///コンストラクタ
		///
		AppInitException(UINT_PTR in_line,LPCTSTR in_fileName,LPCTSTR in_function);
	};


	///
	///nlib例外クラス
	///
	class NLIBException : public Exception{

	private:

		NLIB_RESULT errcode;

	public:
		NLIBException(LPCTSTR errmessage,NLIB_RESULT rslt,UINT_PTR in_line,LPCTSTR in_fileName,LPCTSTR in_function);
		
	

	};


	///
	///ニコ生例外クラス
	///
	class NLiveException :public Exception{

	public:
		///
		///コンストラクタ
		///
		NLiveException(LPCTSTR errmessage,UINT_PTR in_line,LPCTSTR in_fileName,LPCTSTR in_function);
		

	};
	



}