aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/structs/inversionmap.js
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/structs/inversionmap.js')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/structs/inversionmap.js159
1 files changed, 0 insertions, 159 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/structs/inversionmap.js b/contexts/data/lib/closure-library/closure/goog/structs/inversionmap.js
deleted file mode 100644
index 1c7c2e2..0000000
--- a/contexts/data/lib/closure-library/closure/goog/structs/inversionmap.js
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright 2008 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 Provides inversion and inversion map functionality for storing
- * integer ranges and corresponding values.
- *
- */
-
-goog.provide('goog.structs.InversionMap');
-
-goog.require('goog.array');
-
-
-
-/**
- * Maps ranges to values using goog.structs.Inversion.
- * @param {Array.<number>} rangeArray An array of monotonically
- * increasing integer values, with at least one instance.
- * @param {Array.<*>} valueArray An array of corresponding values.
- * Length must be the same as rangeArray.
- * @param {boolean=} opt_delta If true, saves only delta from previous value.
- * @constructor
- */
-goog.structs.InversionMap = function(rangeArray, valueArray, opt_delta) {
- if (rangeArray.length != valueArray.length) {
- // rangeArray and valueArray has to match in number of entries.
- return null;
- }
- this.storeInversion_(rangeArray, opt_delta);
-
- /**
- * @type {Array}
- * @protected
- */
- this.values = valueArray;
-};
-
-
-/**
- * @type {Array}
- * @protected
- */
-goog.structs.InversionMap.prototype.rangeArray;
-
-
-/**
- * Stores the integers as ranges (half-open).
- * If delta is true, the integers are delta from the previous value and
- * will be restored to the absolute value.
- * When used as a set, even indices are IN, and odd are OUT.
- * @param {Array.<number?>} rangeArray An array of monotonically
- * increasing integer values, with at least one instance.
- * @param {boolean=} opt_delta If true, saves only delta from previous value.
- * @private
- */
-goog.structs.InversionMap.prototype.storeInversion_ = function(rangeArray,
- opt_delta) {
- this.rangeArray = rangeArray;
-
- for (var i = 1; i < rangeArray.length; i++) {
- if (rangeArray[i] == null) {
- rangeArray[i] = rangeArray[i - 1] + 1;
- } else if (opt_delta) {
- rangeArray[i] += rangeArray[i - 1];
- }
- }
-};
-
-
-/**
- * Splices a range -> value map into this inversion map.
- * @param {Array.<number>} rangeArray An array of monotonically
- * increasing integer values, with at least one instance.
- * @param {Array.<*>} valueArray An array of corresponding values.
- * Length must be the same as rangeArray.
- * @param {boolean=} opt_delta If true, saves only delta from previous value.
- */
-goog.structs.InversionMap.prototype.spliceInversion = function(
- rangeArray, valueArray, opt_delta) {
- // By building another inversion map, we build the arrays that we need
- // to splice in.
- var otherMap = new goog.structs.InversionMap(
- rangeArray, valueArray, opt_delta);
-
- // Figure out where to splice those arrays.
- var startRange = otherMap.rangeArray[0];
- var endRange =
- (/** @type {number} */ goog.array.peek(otherMap.rangeArray));
- var startSplice = this.getLeast(startRange);
- var endSplice = this.getLeast(endRange);
-
- // The inversion map works by storing the start points of ranges...
- if (startRange != this.rangeArray[startSplice]) {
- // ...if we're splicing in a start point that isn't already here,
- // then we need to insert it after the insertion point.
- startSplice++;
- } // otherwise we overwrite the insertion point.
-
- var spliceLength = endSplice - startSplice + 1;
- goog.partial(goog.array.splice, this.rangeArray, startSplice,
- spliceLength).apply(null, otherMap.rangeArray);
- goog.partial(goog.array.splice, this.values, startSplice,
- spliceLength).apply(null, otherMap.values);
-};
-
-
-/**
- * Gets the value corresponding to a number from the inversion map.
- * @param {number} intKey The number for which value needs to be retrieved
- * from inversion map.
- * @return {*} Value retrieved from inversion map; null if not found.
- */
-goog.structs.InversionMap.prototype.at = function(intKey) {
- var index = this.getLeast(intKey);
- if (index < 0) {
- return null;
- }
- return this.values[index];
-};
-
-
-/**
- * Gets the largest index such that rangeArray[index] <= intKey from the
- * inversion map.
- * @param {number} intKey The probe for which rangeArray is searched.
- * @return {number} Largest index such that rangeArray[index] <= intKey.
- * @protected
- */
-goog.structs.InversionMap.prototype.getLeast = function(intKey) {
- var arr = this.rangeArray;
- var low = 0;
- var high = arr.length;
- while (high - low > 8) {
- var mid = (high + low) >> 1;
- if (arr[mid] <= intKey) {
- low = mid;
- } else {
- high = mid;
- }
- }
- for (; low < high; ++low) {
- if (intKey < arr[low]) {
- break;
- }
- }
- return low - 1;
-};