Newer
Older
libj / modules / j / base / src / assertion_error.cpp
#include <string>
#include <sstream>
#include <j/lang/assertion_error.hpp>

namespace j
{
    namespace lang
    {
        /**
         * AssertionError を構築します。
         */
        AssertionError::AssertionError() noexcept : Error(), file(""), func(""), line(0)
        {
            // NOP
        }

        /**
         * AssertionError を構築します。
         *
         * @param msg メッセージ
         */
        AssertionError::AssertionError(const String &msg) noexcept : Error(msg), file(""), func(""), line(0)
        {
            // NOP
        }

        /**
         * AssertionError を構築します。
         *
         * @param msg メッセージ
         */
        AssertionError::AssertionError(const String &msg, const char *file, const char *func, int line) noexcept
            : Error(msg), file(file), func(func), line(line)
        {
            // NOP
        }

        /**
         * AssertionError のコピーコンストラクタ。
         *
         * @param t コピー元 AssertionError
         */
        AssertionError::AssertionError(const AssertionError &t) noexcept : Error(t), file(t.file), func(t.func), line(t.line)
        {
            // NOP
        }

        /**
         * AssertionError のムーブコンストラクタ。
         *
         * @param str ムーブ元 String
         */
        AssertionError::AssertionError(AssertionError &&t) noexcept
            : Error(std::move(t)), file(std::move(t.file)), func(std::move(t.func)), line(std::move(t.line))
        {
            // NOP
        }

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

        /**
         * エラーが発生したファイル名を返します。
         *
         * @return ファイル名
         */
        const char *AssertionError::getFile() const noexcept
        {
            return file;
        }

        /**
         * エラーが発生した関数名を返します。
         *
         * @return 関数名
         */
        const char *AssertionError::getFunc() const noexcept
        {
            return func;
        }

        /**
         * エラーが発生した行番号を返します。
         *
         * @return 行番号
         */
        int AssertionError::getLine() const noexcept
        {
            return line;
        }

        /**
         * 本オブジェクトの文字列表現を返します。
         *
         * @return 文字列表現
         */
        String AssertionError::toString() const noexcept
        {
            std::ostringstream ss;
            ss << "AssertionError: " << message << std::endl
               << "\tat " << file << ":" << line << " [" << func << "]";
            return String(ss.str());
        }

    } // namespace lang
} // namespace j