-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).JSBI={})}(this,(function(e){"use strict";class t{constructor(e,n){this.sign=e,this.magnitude=new Uint16Array(n)}static JSBI.BigInt(e){if("number"==typeof e)return t.fromNumber(e);if("string"==typeof e)return t.fromString(e);throw new TypeError("Cannot convert "+e+" to BigInt");}toString(e){if(16===e){let e="";for(let t=this.magnitude.length-1;t>=0;t--){const n=this.magnitude[t].toString(16);e+=t===this.magnitude.length-1?n:n.padStart(4,"0")}return(this.sign<0?"-":"")+e}return 10===e||void 0===e?this.toDecimalString():void 0}toDecimalString(){if(0===this.magnitude.length)return"0";const e=this.magnitude.length*4*0.30103|0,n=Array(e+2);let i=n.length;const s=this.magnitude.slice();let r=1;for(;0===s[s.length-1];)s.pop();for(;;){let e=0;for(let n=s.length-1;n>=0;n--){const i=e<<16|s[n];s[n]=i/10|0,e=i%10}if(n[--i]=e+48,r){if(0!==e)break}else if(0===s[s.length-1]){s.pop();continue}r&&(r=0)}return(this.sign<0?"-":"")+String.fromCharCode.apply(null,n.slice(i))}static fromNumber(e){if(0===e)return t.zero;if(e<0){if(e<=-9007199254740992)return t.fromString(e.toString());e=-e;const n=Math.ceil(e/65536);return new t(-1,t.fillArray(n,e))}if(e>=9007199254740992)return t.fromString(e.toString());const n=Math.ceil(e/65536);return new t(1,t.fillArray(n,e))}static fromString(e){if("0"===e)return t.zero;const n=/^([+-])?([0-9]+)$/.exec(e);if(!n)throw new SyntaxError("Invalid BigInt string: "+e);const i="-"===n[1]?-1:1;let s=n[2],r=s.length,o=(r-1)*0.301029995664|0;const a=(r-1)%4;o=o+(a===0?1:a===1?0:a===2?1:2);const u=new Uint16Array((o+3)/4|0);let l=u.length-1;for(;r>0;){const e=s.substring(Math.max(0,r-9),r);r-=e.length;const n=parseInt(e,10);let i=0;for(let e=u.length-1;e>=l;e--){const t=u[e]*1e9+n-i;u[e]=65535&t,i=t>>>16}u[l--]=i}return new t(i,u)}static fillArray(e,t){const n=new Uint16Array(e);for(let i=0;i<e&&t>0;i++)n[i]=65535&t,t/=65536;return n}static add(e,i){if(e.sign===i.sign)return new t(e.sign,t.addMagnitudes(e.magnitude,i.magnitude));const s=t.compareMagnitudes(e.magnitude,i.magnitude);if(0===s)return t.zero;if(s>0){const n=t.subtractMagnitudes(e.magnitude,i.magnitude);return new t(e.sign,n)}const r=t.subtractMagnitudes(i.magnitude,e.magnitude);return new t(i.sign,r)}static subtract(e,i){return t.add(e,t.unaryMinus(i))}static multiply(e,i){if(0===e.magnitude.length||0===i.magnitude.length)return t.zero;const s=e.magnitude.length+i.magnitude.length,r=new Uint16Array(s);for(let t=0;t<e.magnitude.length;t++){let n=0;for(let s=0;s<i.magnitude.length;s++){const o=r[t+s]+(e.magnitude[t]*i.magnitude[s]|0)+n;r[t+s]=65535&o,n=o>>>16}r[t+i.magnitude.length]=n}return new t(e.sign*i.sign,r)}static divide(e,i){if(0===i.magnitude.length)throw new RangeError("Division by zero");if(0===e.magnitude.length)return t.zero;const s=t.compareMagnitudes(e.magnitude,i.magnitude);if(s<0)return t.zero;if(0===s)return e.sign===i.sign?t.one:t.minusOne;const r=t.divideMagnitudes(e.magnitude,i.magnitude);return new t(e.sign*i.sign,r)}static remainder(e,i){if(0===i.magnitude.length)throw new RangeError("Division by zero");if(0===e.magnitude.length)return t.zero;const s=t.compareMagnitudes(e.magnitude,i.magnitude);if(s<0)return e;if(0===s)return t.zero;const r=t.remainderMagnitudes(e.magnitude,i.magnitude);return new t(e.sign,r)}static addMagnitudes(e,t){const n=Math.max(e.length,t.length),i=new Uint16Array(n);let s=0;for(let r=0;r<n;r++){const n=(e[r]||0)+(t[r]||0)+s;i[r]=65535&n,s=n>>>16}return s&&(i[n]=s),i}static subtractMagnitudes(e,t){const n=e.length,i=new Uint16Array(n);let s=0;for(let r=0;r<n;r++){const n=e[r]-(t[r]||0)-s;i[r]=65535&n,s=n<0?1:0}return i}static compareMagnitudes(e,t){if(e.length!==t.length)return e.length>t.length?1:-1;for(let n=e.length-1;n>=0;n--)if(e[n]!==t[n])return e[n]>t[n]?1:-1;return 0}static divideMagnitudes(e,t){const n=e.length,i=t.length,s=new Uint16Array(n-i+1);let r=e.slice();for(let e=n-i;e>=0;e--){let n=r[e+i]<<16|r[e+i-1],o=n/t[i-1]|0;if(o>65535&&(o=65535),o>0){let n=0;for(let s=0;s<i;s++){const i=(t[s]*o|0)+n;n=i>>>16,r[e+s]=r[e+s]-(65535&i)}for(;r[e+i]<n;){o--;let s=0;for(let n=0;n<i;n++){const i=r[e+n]+t[n]+s;r[e+n]=65535&i,s=i>>>16}}}s[e]=o}return s}static remainderMagnitudes(e,t){const n=e.length,i=t.length,s=e.slice();for(let e=n-i;e>=0;e--){let n=s[e+i]<<16|s[e+i-1];let r=n/t[i-1]|0;if(r>65535&&(r=65535),r>0){let n=0;for(let o=0;o<i;o++){const i=(t[o]*r|0)+n;n=i>>>16,s[e+o]=s[e+o]-(65535&i)}for(;s[e+i]<n;){r--;let n=0;for(let r=0;r<i;r++){const i=s[e+r]+t[r]+n;s[e+r]=65535&i,n=i>>>16}}}}return s}static unaryMinus(e){return new t(-e.sign,e.magnitude)}static lessThan(e,t){if(e.sign!==t.sign)return e.sign<t.sign;const n=this.compareMagnitudes(e.magnitude,t.magnitude);return e.sign>0?n<0:n>0}static greaterThan(e,t){return this.lessThan(t,e)}static lessThanOrEqual(e,t){return!this.greaterThan(e,t)}static greaterThanOrEqual(e,t){return!this.lessThan(e,t)}static equal(e,t){return e.sign===t.sign&&0===this.compareMagnitudes(e.magnitude,t.magnitude)}static notEqual(e,t){return!this.equal(e,t)}}t.zero=new t(0,new Uint16Array(0)),t.one=new t(1,new Uint16Array([1])),t.minusOne=new t(-1,new Uint16Array([1])),e.default=t,Object.defineProperty(e,"__esModule",{value:!0})}));
0 commit comments