/*
文件名:BigInt.nut
路径:Dps_A/BaseClass/BigInt/BigInt.nut
创建日期:2025-03-25	18:28
文件用途:大数字类
*/
class longlong {
    Value = null;
    //构造函数 不管是不是string类型都要转成string类型
    constructor(arg) {
        if( typeof arg == "string"){
            Value = arg;
        }
        else if( typeof arg == "integer"){
            Value = arg.tostring();
        }
        else if ( typeof arg == "userdata"){
            local Str = "" + arg;
            Str = Str.slice(Str.find("0x") + 2, -1);
            Value = Str;
        }
    }

    function _add(other) {
        return longlong(Sq_LongLongOperation(this.Value, other.Value, "+"));
    }

    function _sub(other) {
        return longlong(Sq_LongLongOperation(this.Value, other.Value, "-"));
    }

    function _mul(other) {
        return longlong(Sq_LongLongOperation(this.Value, other.Value, "*"));
    }

    function _div(other) {
        return Sq_LongLongOperation(this.Value, other.Value, "/");
    }

    function _unm() {
        return longlong(Sq_LongLongOperation(longlong("0"), this.Value, "-"));
    }

    function _modulo(other) {
        return longlong(Sq_LongLongOperation(this.Value, other.Value, "%"));
    }

    function GetFormat(FType) {
        local Buf = Sq_LongLongOperation(this.Value, FType, "format");
        if (Buf.len()< 2) return Buf + ".0";
        local Value = Buf.slice(0, -1);
        local Unit = Buf.slice(-1);
        local RetStr = format(FType + Unit, Value.tofloat());
        return RetStr;
    }

}