// Copyright (C) 2026 Kiyotsugu Arai
// SPDX-License-Identifier: LGPL-3.0-or-later

// IntSpecialStates.hpp
// 多倍長整数の特殊状態の処理

#ifndef CALX_INT_SPECIAL_STATES_HPP
#define CALX_INT_SPECIAL_STATES_HPP

#include <math/core/mp/Int/IntBase.hpp>
#include <string>

namespace calx {

    /**
     * @brief 多倍長整数の特殊状態を処理するユーティリティクラス
     *
     * このクラスは、NaNや無限大などの特殊状態の多倍長整数を
     * 処理するための静的メソッドを提供します。
     */
    class IntSpecialStates {
    public:
        // 特殊状態の文字列変換
        static std::string handleToString(const Int& value, int base = 10);

        // 特殊状態の演算処理
        static Int handleAddition(const Int& lhs, const Int& rhs);
        static Int handleSubtraction(const Int& lhs, const Int& rhs);
        static Int handleMultiplication(const Int& lhs, const Int& rhs);
        static Int handleDivision(const Int& lhs, const Int& rhs);
        static Int handleModulo(const Int& lhs, const Int& rhs);

        // 特殊状態の比較
        static bool compareLessThan(const Int& lhs, const Int& rhs);
        static bool compareEqual(const Int& lhs, const Int& rhs);
    };

} // namespace calx

#endif // CALX_INT_SPECIAL_STATES_HPP