Newer
Older
project / modules / libscpp / src / scpp_exception.cpp
Nomura Kei on 26 Sep 2022 4 KB UPDATE
/**
 * @file      scpp_exception.cpp
 * @bried     Java ライクな Exception を扱うモジュール。
 * @author    Nomura Kei
 * @copyright 2003 - 2022  Nomura Kei
 */
#include <utility>

#include <scpp.hpp>
#include <scpp_exception.hpp>

#include <sc_errno.h>


namespace scpp
{

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

	/**
	 * 最後に発生した errno に対応するメッセージを持つ Throwable を構築します。
	 * エラーメッセージを取得できない場合、空文字がエラーメッセージに設定されます。
	 */
	Throwable::Throwable() noexcept : message(sc_get_errmsg(NULL, 0, sc_get_errno()))
	{
		// NOP
	}


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


	/**
	 * ムーブコンストラクタ。
	 *
	 * @param t ムーブ元
	 */
	Throwable::Throwable(Throwable&& t) noexcept : message(std::move(t.message))
	{
		// NOP
	}


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


	/**
	 * コピー代入演算子
	 *
	 * @param t 代入元
	 */
	Throwable& Throwable::operator=(const Throwable& t) noexcept
	{
		this->message = t.message;
		return (*this);
	}


	/**
	 * ムーブ代入演算子
	 *
	 * @param t 代入元
	 */
	Throwable& Throwable::operator=(Throwable&& t) noexcept
	{
		this->message = std::move(t.message);
		return (*this);
	}


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


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



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

	/**
	 * Exception を構築します。
	 */
	Exception::Exception() noexcept : Throwable()
	{
		// NOP
	}


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


	/**
	 * ムーブコンストラクタ。
	 *
	 * @param t ムーブ元
	 */
	Exception::Exception(Exception&& t) noexcept : Throwable(t)
	{
		// NOP
	}


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


	/**
	 * コピー代入演算子
	 *
	 * @param t 代入元
	 */
	Exception& Exception::operator=(const Exception& t) noexcept
	{
		Throwable::operator=(t);
		return (*this);
	}


	/**
	 * ムーブ代入演算子
	 *
	 * @param t 代入元
	 */
	Exception& Exception::operator=(Exception&& t) noexcept
	{
		Throwable::operator=(t);
		return (*this);
	}


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



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

	/**
	 * Error を構築します。
	 */
	Error::Error() noexcept : Throwable()
	{
		// NOP
	}


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


	/**
	 * ムーブコンストラクタ。
	 *
	 * @param t ムーブ元
	 */
	Error::Error(Error&& t) noexcept : Throwable(t)
	{
		// NOP
	}


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


	/**
	 * コピー代入演算子
	 *
	 * @param t 代入元
	 */
	Error& Error::operator=(const Error& t) noexcept
	{
		Throwable::operator=(t);
		return (*this);
	}


	/**
	 * ムーブ代入演算子
	 *
	 * @param t 代入元
	 */
	Error& Error::operator=(Error&& t) noexcept
	{
		Throwable::operator=(t);
		return (*this);
	}


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

}