Martin@438: // empty line needed here Martin@445: Number.prototype.add32 = function(x) { return (this + x) | 0; }; Martin@445: Number.prototype.sub32 = function(x) { return (this - x) | 0; }; Martin@445: Number.prototype.mul32 = function(x) { Martin@445: return (((this * (x >> 16)) << 16) + this * (x & 0xFFFF)) | 0; Martin@438: }; Martin@439: Martin@445: Number.prototype.toInt8 = function() { return (this << 24) >> 24; }; Martin@582: Number.prototype.toInt16 = function() { return (this << 16) >> 16; }; Martin@582: Martin@582: var Long = function(low, hi) { Martin@582: this.low = low; Martin@582: this.hi = hi; Martin@582: }; Martin@582: Martin@582: function LongFromNumber(x) { Martin@582: return new Long(x % 0xFFFFFFFF, Math.floor(x / 0xFFFFFFFF)); Martin@582: }; Martin@582: Martin@582: function MakeLong(x) { Martin@582: if ((x.hi == undefined) && (x.low == undefined)) { Martin@582: return LongFromNumber(x); Martin@582: } Martin@582: return x; Martin@582: }; Martin@582: Martin@582: Long.prototype.toInt32 = function() { return this.low | 0; }; Martin@582: Long.prototype.toFP = function() { return this.hi * 0xFFFFFFFF + this.low; }; Martin@582: Martin@582: Long.prototype.toString = function() { Martin@582: return String(this.toFP()); Martin@582: }; Martin@582: Martin@582: Long.prototype.valueOf = function() { Martin@582: return this.toFP(); Martin@582: }; Martin@582: Martin@582: Long.prototype.compare64 = function(x) { Martin@582: if (this.hi == x.hi) { Martin@582: return (this.low == x.low) ? 0 : ((this.low < x.low) ? -1 : 1); Martin@582: } Martin@582: return (this.hi < x.hi) ? -1 : 1; Martin@582: }; Martin@582: Martin@582: Long.prototype.add64 = function(x) { Martin@582: low = this.low + x.low; Martin@582: carry = 0; Martin@582: if (low > 0xFFFFFFFF) { Martin@582: carry = 1; Martin@582: low -= 0xFFFFFFFF; Martin@582: } Martin@582: hi = (this.hi + x.hi + carry) & 0xFFFFFFFF; Martin@582: return new Long(low, hi); Martin@582: }; Martin@582: Martin@582: Long.prototype.div64 = function(x) { Martin@582: return LongFromNumber(Math.floor(this.toFP() / x.toFP())); Martin@582: }; Martin@582: Martin@582: Long.prototype.shl64 = function(x) { Martin@582: if (x > 32) { Martin@582: hi = (this.low << (x - 32)) & 0xFFFFFFFF; Martin@582: low = 0; Martin@582: } else { Martin@582: hi = (this.hi << x) & 0xFFFFFFFF; Martin@582: low_reminder = this.low >> x; Martin@582: hi |= low_reminder; Martin@582: low = this.low << x; Martin@582: } Martin@582: return new Long(low, hi); Martin@582: };