/* =============================================================================
 *  scpp_exception.cpp
 *  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
 * =============================================================================
 *
 *  Java ライクな Exception を扱うモジュール
 *
 */
#include <scpp_errno.hpp>
#include <scpp_exception.hpp>


namespace scpp
{


////////////////////////////////////////////////////////////////////////////////
//
// Throwable
//

/**
 * 最後に発生した errno に対応するメッセージをもつ Throwable を構築します.
 * エラーメッセージを取得できない場合, 空文字がメッセージに設定されます.
 */
Throwable::Throwable() throw() : message("")
{
	int  errnum = Errno::getError();
	Errno::getErrorMessage(&this->message, errnum);
}


/**
 * コピーコンストラクタ.
 *
 * @param t コピー元
 */
Throwable::Throwable(const Throwable& t) throw() : message(t.message)
{
	// NOP
}


/**
 * 指定されたメッセージを持つ Throwable を構築します.
 *
 * @param msg メッセージ
 */
Throwable::Throwable(const std::string& msg) throw() : message(msg)
{
	// NOP
}


/**
 * デストラクタ.
 */
Throwable::~Throwable() throw()
{
	// NOP
}


/**
 * エラーメッセージを返します.
 *
 * @return エラーメッセージ
 */
const char* Throwable::what() const throw()
{
	return message.c_str();
}



////////////////////////////////////////////////////////////////////////////////
//
// Exception
//

/**
 * 最後に発生した errno に対応するメッセージをもつ Exception を構築します.
 * エラーメッセージを取得できない場合, 空文字がメッセージに設定されます.
 */
Exception::Exception() throw() : Throwable()
{
}


/**
 * コピーコンストラクタ.
 *
 * @param t コピー元
 */
Exception::Exception(const Exception& t) throw() : Throwable(t)
{
	// NOP
}


/**
 * 指定されたメッセージを持つ Exception を構築します.
 *
 * @param msg メッセージ
 */
Exception::Exception(const std::string& msg) throw() : Throwable(msg)
{
	// NOP
}


/**
 * デストラクタ.
 */
Exception::~Exception() throw()
{
	// NOP
}



////////////////////////////////////////////////////////////////////////////////
//
// Error
//

/**
 * 最後に発生した errno に対応するメッセージをもつ Exception を構築します.
 * エラーメッセージを取得できない場合, 空文字がメッセージに設定されます.
 */
Error::Error() throw() : Throwable()
{
	// NOP
}


/**
 * コピーコンストラクタ.
 *
 * @param t コピー元
 */
Error::Error(const Error& t) throw() : Throwable(t)
{
	// NOP
}


/**
 * 指定されたメッセージを持つ Exception を構築します.
 *
 * @param msg メッセージ
 */
Error::Error(const std::string& msg) throw() : Throwable(msg)
{
	// NOP
}


/**
 * デストラクタ.
 */
Error::~Error() throw()
{
	// NOP
}



}	// namespace scpp

