/* =============================================================================
 *  scpp_exception.hpp
 *  Copyright (c)  2003 - 2013  Nomura Kei
 *  LICENSE :
 *  LGPL (GNU Lesser General General Public License - Version 3,29 June 2007)
 *  http://www.gnu.org/copyleft/lesser.html
 * =============================================================================
 *
 *
 */
#ifndef SCPP_EXCEPTION_HPP
#define SCPP_EXCEPTION_HPP


#include <exception>
#include <string>

#include <scpp_compiler.hpp>


namespace scpp
{

/**
 * 本 libscpp の例外基底クラス.
 * libscpp で扱う例外は, 本 Throwable を継承しています.
 */
class Throwable : public std::exception
{
	public:
		Throwable() throw();
		Throwable(const Throwable& t) throw();
		Throwable(const std::string& msg) throw();
		virtual ~Throwable() throw();
		virtual const char* what() const throw();

	protected:
		std::string message;
	
};


/**
 * 本 libscpp の Exception クラス.
 * 本 libscpp にて, 回復可能なエラーは,
 * 本クラスを継承したクラスを throw します.
 */
class Exception : public Throwable
{
	public:
		Exception() throw();
		Exception(const Exception& t) throw();
		Exception(const std::string& msg) throw();
		virtual ~Exception() throw();

};


/**
 * 本 libscpp の Error クラス.
 * 本 libscpp にて, 回復が困難なエラーは,
 * 本クラスを継承したクラスを throw します.
 */
class Error : public Throwable
{
	public:
		Error() throw();
		Error(const Error& t) throw();
		Error(const std::string& msg) throw();
		virtual ~Error() throw();

};


}	// namespace scpp


#endif	// SCPP_EXCEPTION_HPP

