diff options
Diffstat (limited to 'assets/viz/1/goog/math/integer.js')
-rw-r--r-- | assets/viz/1/goog/math/integer.js | 807 |
1 files changed, 807 insertions, 0 deletions
diff --git a/assets/viz/1/goog/math/integer.js b/assets/viz/1/goog/math/integer.js new file mode 100644 index 0000000..11b6a95 --- /dev/null +++ b/assets/viz/1/goog/math/integer.js @@ -0,0 +1,807 @@ +// Copyright 2009 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Defines an Integer class for representing (potentially) + * infinite length two's-complement integer values. + * + * For the specific case of 64-bit integers, use goog.math.Long, which is more + * efficient. + * + */ + +goog.provide('goog.math.Integer'); + + + +/** + * Constructs a two's-complement integer an array containing bits of the + * integer in 32-bit (signed) pieces, given in little-endian order (i.e., + * lowest-order bits in the first piece), and the sign of -1 or 0. + * + * See the from* functions below for other convenient ways of constructing + * Integers. + * + * The internal representation of an integer is an array of 32-bit signed + * pieces, along with a sign (0 or -1) that indicates the contents of all the + * other 32-bit pieces out to infinity. We use 32-bit pieces because these are + * the size of integers on which Javascript performs bit-operations. For + * operations like addition and multiplication, we split each number into 16-bit + * pieces, which can easily be multiplied within Javascript's floating-point + * representation without overflow or change in sign. + * + * @struct + * @constructor + * @param {Array<number>} bits Array containing the bits of the number. + * @param {number} sign The sign of the number: -1 for negative and 0 positive. + * @final + */ +goog.math.Integer = function(bits, sign) { + /** + * @type {!Array<number>} + * @private + */ + this.bits_ = []; + + /** + * @type {number} + * @private + */ + this.sign_ = sign; + + // Copy the 32-bit signed integer values passed in. We prune out those at the + // top that equal the sign since they are redundant. + var top = true; + for (var i = bits.length - 1; i >= 0; i--) { + var val = bits[i] | 0; + if (!top || val != sign) { + this.bits_[i] = val; + top = false; + } + } +}; + + +// NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the +// from* methods on which they depend. + + +/** + * A cache of the Integer representations of small integer values. + * @type {!Object} + * @private + */ +goog.math.Integer.IntCache_ = {}; + + +/** + * Returns an Integer representing the given (32-bit) integer value. + * @param {number} value A 32-bit integer value. + * @return {!goog.math.Integer} The corresponding Integer value. + */ +goog.math.Integer.fromInt = function(value) { + if (-128 <= value && value < 128) { + var cachedObj = goog.math.Integer.IntCache_[value]; + if (cachedObj) { + return cachedObj; + } + } + + var obj = new goog.math.Integer([value | 0], value < 0 ? -1 : 0); + if (-128 <= value && value < 128) { + goog.math.Integer.IntCache_[value] = obj; + } + return obj; +}; + + +/** + * Returns an Integer representing the given value, provided that it is a finite + * number. Otherwise, zero is returned. + * @param {number} value The value in question. + * @return {!goog.math.Integer} The corresponding Integer value. + */ +goog.math.Integer.fromNumber = function(value) { + if (isNaN(value) || !isFinite(value)) { + return goog.math.Integer.ZERO; + } else if (value < 0) { + return goog.math.Integer.fromNumber(-value).negate(); + } else { + var bits = []; + var pow = 1; + for (var i = 0; value >= pow; i++) { + bits[i] = (value / pow) | 0; + pow *= goog.math.Integer.TWO_PWR_32_DBL_; + } + return new goog.math.Integer(bits, 0); + } +}; + + +/** + * Returns a Integer representing the value that comes by concatenating the + * given entries, each is assumed to be 32 signed bits, given in little-endian + * order (lowest order bits in the lowest index), and sign-extending the highest + * order 32-bit value. + * @param {Array<number>} bits The bits of the number, in 32-bit signed pieces, + * in little-endian order. + * @return {!goog.math.Integer} The corresponding Integer value. + */ +goog.math.Integer.fromBits = function(bits) { + var high = bits[bits.length - 1]; + return new goog.math.Integer(bits, high & (1 << 31) ? -1 : 0); +}; + + +/** + * Returns an Integer representation of the given string, written using the + * given radix. + * @param {string} str The textual representation of the Integer. + * @param {number=} opt_radix The radix in which the text is written. + * @return {!goog.math.Integer} The corresponding Integer value. + */ +goog.math.Integer.fromString = function(str, opt_radix) { + if (str.length == 0) { + throw Error('number format error: empty string'); + } + + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (str.charAt(0) == '-') { + return goog.math.Integer.fromString(str.substring(1), radix).negate(); + } else if (str.indexOf('-') >= 0) { + throw Error('number format error: interior "-" character'); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = goog.math.Integer.fromNumber(Math.pow(radix, 8)); + + var result = goog.math.Integer.ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i); + var value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = goog.math.Integer.fromNumber(Math.pow(radix, size)); + result = result.multiply(power).add(goog.math.Integer.fromNumber(value)); + } else { + result = result.multiply(radixToPower); + result = result.add(goog.math.Integer.fromNumber(value)); + } + } + return result; +}; + + +/** + * A number used repeatedly in calculations. This must appear before the first + * call to the from* functions below. + * @type {number} + * @private + */ +goog.math.Integer.TWO_PWR_32_DBL_ = (1 << 16) * (1 << 16); + + +/** @type {!goog.math.Integer} */ +goog.math.Integer.ZERO = goog.math.Integer.fromInt(0); + + +/** @type {!goog.math.Integer} */ +goog.math.Integer.ONE = goog.math.Integer.fromInt(1); + + +/** + * @type {!goog.math.Integer} + * @private + */ +goog.math.Integer.TWO_PWR_24_ = goog.math.Integer.fromInt(1 << 24); + + +/** + * Returns the value, assuming it is a 32-bit integer. + * @return {number} The corresponding int value. + */ +goog.math.Integer.prototype.toInt = function() { + return this.bits_.length > 0 ? this.bits_[0] : this.sign_; +}; + + +/** @return {number} The closest floating-point representation to this value. */ +goog.math.Integer.prototype.toNumber = function() { + if (this.isNegative()) { + return -this.negate().toNumber(); + } else { + var val = 0; + var pow = 1; + for (var i = 0; i < this.bits_.length; i++) { + val += this.getBitsUnsigned(i) * pow; + pow *= goog.math.Integer.TWO_PWR_32_DBL_; + } + return val; + } +}; + + +/** + * @param {number=} opt_radix The radix in which the text should be written. + * @return {string} The textual representation of this value. + * @override + */ +goog.math.Integer.prototype.toString = function(opt_radix) { + var radix = opt_radix || 10; + if (radix < 2 || 36 < radix) { + throw Error('radix out of range: ' + radix); + } + + if (this.isZero()) { + return '0'; + } else if (this.isNegative()) { + return '-' + this.negate().toString(radix); + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = goog.math.Integer.fromNumber(Math.pow(radix, 6)); + + var rem = this; + var result = ''; + while (true) { + var remDiv = rem.divide(radixToPower); + // The right shifting fixes negative values in the case when + // intval >= 2^31; for more details see + // https://github.com/google/closure-library/pull/498 + var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt() >>> 0; + var digits = intval.toString(radix); + + rem = remDiv; + if (rem.isZero()) { + return digits + result; + } else { + while (digits.length < 6) { + digits = '0' + digits; + } + result = '' + digits + result; + } + } +}; + + +/** + * Returns the index-th 32-bit (signed) piece of the Integer according to + * little-endian order (i.e., index 0 contains the smallest bits). + * @param {number} index The index in question. + * @return {number} The requested 32-bits as a signed number. + */ +goog.math.Integer.prototype.getBits = function(index) { + if (index < 0) { + return 0; // Allowing this simplifies bit shifting operations below... + } else if (index < this.bits_.length) { + return this.bits_[index]; + } else { + return this.sign_; + } +}; + + +/** + * Returns the index-th 32-bit piece as an unsigned number. + * @param {number} index The index in question. + * @return {number} The requested 32-bits as an unsigned number. + */ +goog.math.Integer.prototype.getBitsUnsigned = function(index) { + var val = this.getBits(index); + return val >= 0 ? val : goog.math.Integer.TWO_PWR_32_DBL_ + val; +}; + + +/** @return {number} The sign bit of this number, -1 or 0. */ +goog.math.Integer.prototype.getSign = function() { + return this.sign_; +}; + + +/** @return {boolean} Whether this value is zero. */ +goog.math.Integer.prototype.isZero = function() { + if (this.sign_ != 0) { + return false; + } + for (var i = 0; i < this.bits_.length; i++) { + if (this.bits_[i] != 0) { + return false; + } + } + return true; +}; + + +/** @return {boolean} Whether this value is negative. */ +goog.math.Integer.prototype.isNegative = function() { + return this.sign_ == -1; +}; + + +/** @return {boolean} Whether this value is odd. */ +goog.math.Integer.prototype.isOdd = function() { + return (this.bits_.length == 0) && (this.sign_ == -1) || + (this.bits_.length > 0) && ((this.bits_[0] & 1) != 0); +}; + + +/** + * @param {goog.math.Integer} other Integer to compare against. + * @return {boolean} Whether this Integer equals the other. + */ +goog.math.Integer.prototype.equals = function(other) { + if (this.sign_ != other.sign_) { + return false; + } + var len = Math.max(this.bits_.length, other.bits_.length); + for (var i = 0; i < len; i++) { + if (this.getBits(i) != other.getBits(i)) { + return false; + } + } + return true; +}; + + +/** + * @param {goog.math.Integer} other Integer to compare against. + * @return {boolean} Whether this Integer does not equal the other. + */ +goog.math.Integer.prototype.notEquals = function(other) { + return !this.equals(other); +}; + + +/** + * @param {goog.math.Integer} other Integer to compare against. + * @return {boolean} Whether this Integer is greater than the other. + */ +goog.math.Integer.prototype.greaterThan = function(other) { + return this.compare(other) > 0; +}; + + +/** + * @param {goog.math.Integer} other Integer to compare against. + * @return {boolean} Whether this Integer is greater than or equal to the other. + */ +goog.math.Integer.prototype.greaterThanOrEqual = function(other) { + return this.compare(other) >= 0; +}; + + +/** + * @param {goog.math.Integer} other Integer to compare against. + * @return {boolean} Whether this Integer is less than the other. + */ +goog.math.Integer.prototype.lessThan = function(other) { + return this.compare(other) < 0; +}; + + +/** + * @param {goog.math.Integer} other Integer to compare against. + * @return {boolean} Whether this Integer is less than or equal to the other. + */ +goog.math.Integer.prototype.lessThanOrEqual = function(other) { + return this.compare(other) <= 0; +}; + + +/** + * Compares this Integer with the given one. + * @param {goog.math.Integer} other Integer to compare against. + * @return {number} 0 if they are the same, 1 if the this is greater, and -1 + * if the given one is greater. + */ +goog.math.Integer.prototype.compare = function(other) { + var diff = this.subtract(other); + if (diff.isNegative()) { + return -1; + } else if (diff.isZero()) { + return 0; + } else { + return +1; + } +}; + + +/** + * Returns an integer with only the first numBits bits of this value, sign + * extended from the final bit. + * @param {number} numBits The number of bits by which to shift. + * @return {!goog.math.Integer} The shorted integer value. + */ +goog.math.Integer.prototype.shorten = function(numBits) { + var arr_index = (numBits - 1) >> 5; + var bit_index = (numBits - 1) % 32; + var bits = []; + for (var i = 0; i < arr_index; i++) { + bits[i] = this.getBits(i); + } + var sigBits = bit_index == 31 ? 0xFFFFFFFF : (1 << (bit_index + 1)) - 1; + var val = this.getBits(arr_index) & sigBits; + if (val & (1 << bit_index)) { + val |= 0xFFFFFFFF - sigBits; + bits[arr_index] = val; + return new goog.math.Integer(bits, -1); + } else { + bits[arr_index] = val; + return new goog.math.Integer(bits, 0); + } +}; + + +/** @return {!goog.math.Integer} The negation of this value. */ +goog.math.Integer.prototype.negate = function() { + return this.not().add(goog.math.Integer.ONE); +}; + + +/** + * Returns the sum of this and the given Integer. + * @param {goog.math.Integer} other The Integer to add to this. + * @return {!goog.math.Integer} The Integer result. + */ +goog.math.Integer.prototype.add = function(other) { + var len = Math.max(this.bits_.length, other.bits_.length); + var arr = []; + var carry = 0; + + for (var i = 0; i <= len; i++) { + var a1 = this.getBits(i) >>> 16; + var a0 = this.getBits(i) & 0xFFFF; + + var b1 = other.getBits(i) >>> 16; + var b0 = other.getBits(i) & 0xFFFF; + + var c0 = carry + a0 + b0; + var c1 = (c0 >>> 16) + a1 + b1; + carry = c1 >>> 16; + c0 &= 0xFFFF; + c1 &= 0xFFFF; + arr[i] = (c1 << 16) | c0; + } + return goog.math.Integer.fromBits(arr); +}; + + +/** + * Returns the difference of this and the given Integer. + * @param {goog.math.Integer} other The Integer to subtract from this. + * @return {!goog.math.Integer} The Integer result. + */ +goog.math.Integer.prototype.subtract = function(other) { + return this.add(other.negate()); +}; + + +/** + * Returns the product of this and the given Integer. + * @param {goog.math.Integer} other The Integer to multiply against this. + * @return {!goog.math.Integer} The product of this and the other. + */ +goog.math.Integer.prototype.multiply = function(other) { + if (this.isZero()) { + return goog.math.Integer.ZERO; + } else if (other.isZero()) { + return goog.math.Integer.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().multiply(other.negate()); + } else { + return this.negate().multiply(other).negate(); + } + } else if (other.isNegative()) { + return this.multiply(other.negate()).negate(); + } + + // If both numbers are small, use float multiplication + if (this.lessThan(goog.math.Integer.TWO_PWR_24_) && + other.lessThan(goog.math.Integer.TWO_PWR_24_)) { + return goog.math.Integer.fromNumber(this.toNumber() * other.toNumber()); + } + + // Fill in an array of 16-bit products. + var len = this.bits_.length + other.bits_.length; + var arr = []; + for (var i = 0; i < 2 * len; i++) { + arr[i] = 0; + } + for (var i = 0; i < this.bits_.length; i++) { + for (var j = 0; j < other.bits_.length; j++) { + var a1 = this.getBits(i) >>> 16; + var a0 = this.getBits(i) & 0xFFFF; + + var b1 = other.getBits(j) >>> 16; + var b0 = other.getBits(j) & 0xFFFF; + + arr[2 * i + 2 * j] += a0 * b0; + goog.math.Integer.carry16_(arr, 2 * i + 2 * j); + arr[2 * i + 2 * j + 1] += a1 * b0; + goog.math.Integer.carry16_(arr, 2 * i + 2 * j + 1); + arr[2 * i + 2 * j + 1] += a0 * b1; + goog.math.Integer.carry16_(arr, 2 * i + 2 * j + 1); + arr[2 * i + 2 * j + 2] += a1 * b1; + goog.math.Integer.carry16_(arr, 2 * i + 2 * j + 2); + } + } + + // Combine the 16-bit values into 32-bit values. + for (var i = 0; i < len; i++) { + arr[i] = (arr[2 * i + 1] << 16) | arr[2 * i]; + } + for (var i = len; i < 2 * len; i++) { + arr[i] = 0; + } + return new goog.math.Integer(arr, 0); +}; + + +/** + * Carries any overflow from the given index into later entries. + * @param {Array<number>} bits Array of 16-bit values in little-endian order. + * @param {number} index The index in question. + * @private + */ +goog.math.Integer.carry16_ = function(bits, index) { + while ((bits[index] & 0xFFFF) != bits[index]) { + bits[index + 1] += bits[index] >>> 16; + bits[index] &= 0xFFFF; + } +}; + + +/** + * Returns "this" Integer divided by the given one. Both "this" and the given + * Integer MUST be positive. + * + * This method is only needed for very large numbers (>10^308), + * for which the original division algorithm gets into an infinite + * loop (see https://github.com/google/closure-library/issues/500). + * + * The algorithm has some possible performance enhancements (or + * could be rewritten entirely), it's just an initial solution for + * the issue linked above. + * + * @param {!goog.math.Integer} other The Integer to divide "this" by. + * @return {!goog.math.Integer} "this" value divided by the given one. + * @private + */ +goog.math.Integer.prototype.slowDivide_ = function(other) { + if (this.isNegative() || other.isNegative()) { + throw Error('slowDivide_ only works with positive integers.'); + } + + var twoPower = goog.math.Integer.ONE; + var multiple = other; + + // First we have to figure out what the highest bit of the result + // is, so we increase "twoPower" and "multiple" until "multiple" + // exceeds "this". + while (multiple.lessThanOrEqual(this)) { + twoPower = twoPower.shiftLeft(1); + multiple = multiple.shiftLeft(1); + } + + // Rewind by one power of two, giving us the highest bit of the + // result. + var res = twoPower.shiftRight(1); + var total = multiple.shiftRight(1); + + // Now we starting decreasing "multiple" and "twoPower" to find the + // rest of the bits of the result. + var total2; + multiple = multiple.shiftRight(2); + twoPower = twoPower.shiftRight(2); + while (!multiple.isZero()) { + // whenever we can add "multiple" to the total and not exceed + // "this", that means we've found a 1 bit. Else we've found a 0 + // and don't need to add to the result. + total2 = total.add(multiple); + if (total2.lessThanOrEqual(this)) { + res = res.add(twoPower); + total = total2; + } + multiple = multiple.shiftRight(1); + twoPower = twoPower.shiftRight(1); + } + return res; +}; + + +/** + * Returns this Integer divided by the given one. + * @param {!goog.math.Integer} other The Integer to divide this by. + * @return {!goog.math.Integer} This value divided by the given one. + */ +goog.math.Integer.prototype.divide = function(other) { + if (other.isZero()) { + throw Error('division by zero'); + } else if (this.isZero()) { + return goog.math.Integer.ZERO; + } + + if (this.isNegative()) { + if (other.isNegative()) { + return this.negate().divide(other.negate()); + } else { + return this.negate().divide(other).negate(); + } + } else if (other.isNegative()) { + return this.divide(other.negate()).negate(); + } + + // Have to degrade to slowDivide for Very Large Numbers, because + // they're out of range for the floating-point approximation + // technique used below. + if (this.bits_.length > 30) { + return this.slowDivide_(other); + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + var res = goog.math.Integer.ZERO; + var rem = this; + while (rem.greaterThanOrEqual(other)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2); + var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48); + + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + var approxRes = goog.math.Integer.fromNumber(approx); + var approxRem = approxRes.multiply(other); + while (approxRem.isNegative() || approxRem.greaterThan(rem)) { + approx -= delta; + approxRes = goog.math.Integer.fromNumber(approx); + approxRem = approxRes.multiply(other); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) { + approxRes = goog.math.Integer.ONE; + } + + res = res.add(approxRes); + rem = rem.subtract(approxRem); + } + return res; +}; + + +/** + * Returns this Integer modulo the given one. + * @param {!goog.math.Integer} other The Integer by which to mod. + * @return {!goog.math.Integer} This value modulo the given one. + */ +goog.math.Integer.prototype.modulo = function(other) { + return this.subtract(this.divide(other).multiply(other)); +}; + + +/** @return {!goog.math.Integer} The bitwise-NOT of this value. */ +goog.math.Integer.prototype.not = function() { + var len = this.bits_.length; + var arr = []; + for (var i = 0; i < len; i++) { + arr[i] = ~this.bits_[i]; + } + return new goog.math.Integer(arr, ~this.sign_); +}; + + +/** + * Returns the bitwise-AND of this Integer and the given one. + * @param {goog.math.Integer} other The Integer to AND with this. + * @return {!goog.math.Integer} The bitwise-AND of this and the other. + */ +goog.math.Integer.prototype.and = function(other) { + var len = Math.max(this.bits_.length, other.bits_.length); + var arr = []; + for (var i = 0; i < len; i++) { + arr[i] = this.getBits(i) & other.getBits(i); + } + return new goog.math.Integer(arr, this.sign_ & other.sign_); +}; + + +/** + * Returns the bitwise-OR of this Integer and the given one. + * @param {goog.math.Integer} other The Integer to OR with this. + * @return {!goog.math.Integer} The bitwise-OR of this and the other. + */ +goog.math.Integer.prototype.or = function(other) { + var len = Math.max(this.bits_.length, other.bits_.length); + var arr = []; + for (var i = 0; i < len; i++) { + arr[i] = this.getBits(i) | other.getBits(i); + } + return new goog.math.Integer(arr, this.sign_ | other.sign_); +}; + + +/** + * Returns the bitwise-XOR of this Integer and the given one. + * @param {goog.math.Integer} other The Integer to XOR with this. + * @return {!goog.math.Integer} The bitwise-XOR of this and the other. + */ +goog.math.Integer.prototype.xor = function(other) { + var len = Math.max(this.bits_.length, other.bits_.length); + var arr = []; + for (var i = 0; i < len; i++) { + arr[i] = this.getBits(i) ^ other.getBits(i); + } + return new goog.math.Integer(arr, this.sign_ ^ other.sign_); +}; + + +/** + * Returns this value with bits shifted to the left by the given amount. + * @param {number} numBits The number of bits by which to shift. + * @return {!goog.math.Integer} This shifted to the left by the given amount. + */ +goog.math.Integer.prototype.shiftLeft = function(numBits) { + var arr_delta = numBits >> 5; + var bit_delta = numBits % 32; + var len = this.bits_.length + arr_delta + (bit_delta > 0 ? 1 : 0); + var arr = []; + for (var i = 0; i < len; i++) { + if (bit_delta > 0) { + arr[i] = (this.getBits(i - arr_delta) << bit_delta) | + (this.getBits(i - arr_delta - 1) >>> (32 - bit_delta)); + } else { + arr[i] = this.getBits(i - arr_delta); + } + } + return new goog.math.Integer(arr, this.sign_); +}; + + +/** + * Returns this value with bits shifted to the right by the given amount. + * @param {number} numBits The number of bits by which to shift. + * @return {!goog.math.Integer} This shifted to the right by the given amount. + */ +goog.math.Integer.prototype.shiftRight = function(numBits) { + var arr_delta = numBits >> 5; + var bit_delta = numBits % 32; + var len = this.bits_.length - arr_delta; + var arr = []; + for (var i = 0; i < len; i++) { + if (bit_delta > 0) { + arr[i] = (this.getBits(i + arr_delta) >>> bit_delta) | + (this.getBits(i + arr_delta + 1) << (32 - bit_delta)); + } else { + arr[i] = this.getBits(i + arr_delta); + } + } + return new goog.math.Integer(arr, this.sign_); +}; |