Index: tracing/tracing/base/sorted_array_utils.html |
diff --git a/tracing/tracing/base/sorted_array_utils.html b/tracing/tracing/base/sorted_array_utils.html |
deleted file mode 100644 |
index 7ba5e1c70b2d66738fbb6f30e3ed531de7d6d6aa..0000000000000000000000000000000000000000 |
--- a/tracing/tracing/base/sorted_array_utils.html |
+++ /dev/null |
@@ -1,331 +0,0 @@ |
-<!DOCTYPE html> |
-<!-- |
-Copyright (c) 2014 The Chromium Authors. All rights reserved. |
-Use of this source code is governed by a BSD-style license that can be |
-found in the LICENSE file. |
---> |
-<link rel="import" href="/tracing/base/base.html"> |
-<script> |
-'use strict'; |
- |
-/** |
- * @fileoverview Helper functions for doing intersections and iteration |
- * over sorted arrays and intervals. |
- * |
- */ |
-tr.exportTo('tr.b', function() { |
- /** |
- * Finds the first index in the array whose value is >= loVal. |
- * |
- * The key for the search is defined by the mapFn. This array must |
- * be prearranged such that ary.map(mapFn) would also be sorted in |
- * ascending order. |
- * |
- * @param {Array} ary An array of arbitrary objects. |
- * @param {function():*} mapFn Callback that produces a key value |
- * from an element in ary. |
- * @param {number} loVal Value for which to search. |
- * @return {Number} Offset o into ary where all ary[i] for i <= o |
- * are < loVal, or ary.length if loVal is greater than all elements in |
- * the array. |
- */ |
- function findLowIndexInSortedArray(ary, mapFn, loVal) { |
- if (ary.length === 0) |
- return 1; |
- |
- var low = 0; |
- var high = ary.length - 1; |
- var i; |
- var comparison; |
- var hitPos = -1; |
- while (low <= high) { |
- i = Math.floor((low + high) / 2); |
- comparison = mapFn(ary[i]) - loVal; |
- if (comparison < 0) { |
- low = i + 1; continue; |
- } else if (comparison > 0) { |
- high = i - 1; continue; |
- } else { |
- hitPos = i; |
- high = i - 1; |
- } |
- } |
- // return where we hit, or failing that the low pos |
- return hitPos !== -1 ? hitPos : low; |
- } |
- |
- // From devtools/front_end/platform/utilities.js upperBound |
- function findHighIndexInSortedArray(ary, mapFn, loVal, hiVal) { |
- var lo = loVal || 0; |
- var hi = hiVal !== undefined ? hiVal : ary.length; |
- while (lo < hi) { |
- var mid = (lo + hi) >> 1; |
- if (mapFn(ary[mid]) >= 0) |
- lo = mid + 1; |
- else |
- hi = mid; |
- } |
- return hi; |
- } |
- |
- /** |
- * Finds an index in an array of intervals that either intersects |
- * the provided loVal, or if no intersection is found, -1 or ary.length. |
- * |
- * The array of intervals is defined implicitly via two mapping functions |
- * over the provided ary. mapLoFn determines the lower value of the interval, |
- * mapWidthFn the width. Intersection is lower-inclusive, e.g. [lo,lo+w). |
- * |
- * The array of intervals formed by this mapping must be non-overlapping and |
- * sorted in ascending order by loVal. |
- * |
- * @param {Array} ary An array of objects that can be converted into sorted |
- * nonoverlapping ranges [x,y) using the mapLoFn and mapWidth. |
- * @param {function():*} mapLoFn Callback that produces the low value for the |
- * interval represented by an element in the array. |
- * @param {function():*} mapWidthFn Callback that produces the width for the |
- * interval represented by an element in the array. |
- * @param {number} loVal The low value for the search. |
- * @return {Number} An index in the array that intersects or is first-above |
- * loVal, -1 if none found and loVal is below than all the intervals, |
- * ary.length if loVal is greater than all the intervals. |
- */ |
- function findIndexInSortedIntervals(ary, mapLoFn, mapWidthFn, loVal) { |
- var first = findLowIndexInSortedArray(ary, mapLoFn, loVal); |
- if (first === 0) { |
- if (loVal >= mapLoFn(ary[0]) && |
- loVal < mapLoFn(ary[0]) + mapWidthFn(ary[0], 0)) |
- return 0; |
- return -1; |
- } |
- |
- if (first < ary.length) { |
- if (loVal >= mapLoFn(ary[first]) && |
- loVal < mapLoFn(ary[first]) + mapWidthFn(ary[first], first)) |
- return first; |
- if (loVal >= mapLoFn(ary[first - 1]) && |
- loVal < mapLoFn(ary[first - 1]) + |
- mapWidthFn(ary[first - 1], first - 1)) |
- return first - 1; |
- return ary.length; |
- } |
- |
- if (first === ary.length) { |
- if (loVal >= mapLoFn(ary[first - 1]) && |
- loVal < mapLoFn(ary[first - 1]) + |
- mapWidthFn(ary[first - 1], first - 1)) |
- return first - 1; |
- return ary.length; |
- } |
- |
- return ary.length; |
- } |
- |
- /** |
- * Finds an index in an array of sorted closed intervals that either |
- * intersects the provided val, or if no intersection is found, -1 or |
- * ary.length. |
- * |
- * The array of intervals is defined implicitly via two mapping functions |
- * over the provided ary. mapLoFn determines the lower value of the interval, |
- * mapHiFn the high. Intersection is closed, e.g. [lo,hi], unlike with |
- * findIndexInSortedIntervals, which is right-open. |
- * |
- * The array of intervals formed by this mapping must be non-overlapping, and |
- * sorted in ascending order by val. |
- * |
- * @param {Array} ary An array of objects that can be converted into sorted |
- * nonoverlapping ranges [x,y) using the mapLoFn and mapWidth. |
- * @param {function():*} mapLoFn Callback that produces the low value for the |
- * interval represented by an element in the array. |
- * @param {function():*} mapHiFn Callback that produces the high for the |
- * interval represented by an element in the array. |
- * @param {number} val The value for the search. |
- * @return {Number} An index in the array that intersects or is first-above |
- * val, -1 if none found and val is below than all the intervals, |
- * ary.length if val is greater than all the intervals. |
- */ |
- function findIndexInSortedClosedIntervals(ary, mapLoFn, mapHiFn, val) { |
- var i = findLowIndexInSortedArray(ary, mapLoFn, val); |
- if (i === 0) { |
- if (val >= mapLoFn(ary[0], 0) && |
- val <= mapHiFn(ary[0], 0)) |
- return 0; |
- return -1; |
- } |
- |
- if (i < ary.length) { |
- if (val >= mapLoFn(ary[i - 1], i - 1) && |
- val <= mapHiFn(ary[i - 1], i - 1)) |
- return i - 1; |
- if (val >= mapLoFn(ary[i], i) && |
- val <= mapHiFn(ary[i], i)) |
- return i; |
- return ary.length; |
- } |
- |
- if (i === ary.length) { |
- if (val >= mapLoFn(ary[i - 1], i - 1) && |
- val <= mapHiFn(ary[i - 1], i - 1)) |
- return i - 1; |
- return ary.length; |
- } |
- |
- return ary.length; |
- } |
- |
- /** |
- * Calls cb for all intervals in the implicit array of intervals |
- * defnied by ary, mapLoFn and mapHiFn that intersect the range |
- * [loVal,hiVal) |
- * |
- * This function uses the same scheme as findLowIndexInSortedArray |
- * to define the intervals. The same restrictions on sortedness and |
- * non-overlappingness apply. |
- * |
- * @param {Array} ary An array of objects that can be converted into sorted |
- * nonoverlapping ranges [x,y) using the mapLoFn and mapWidth. |
- * @param {function():*} mapLoFn Callback that produces the low value for the |
- * interval represented by an element in the array. |
- * @param {function():*} mapWidthFn Callback that produces the width for the |
- * interval represented by an element in the array. |
- * @param {number} loVal The low value for the search, inclusive. |
- * @param {number} hiVal The high value for the search, non inclusive. |
- * @param {function():*} cb The function to run for intersecting intervals. |
- */ |
- function iterateOverIntersectingIntervals(ary, mapLoFn, mapWidthFn, loVal, |
- hiVal, cb) { |
- if (ary.length === 0) |
- return; |
- |
- if (loVal > hiVal) return; |
- |
- var i = findLowIndexInSortedArray(ary, mapLoFn, loVal); |
- if (i === -1) { |
- return; |
- } |
- if (i > 0) { |
- var hi = mapLoFn(ary[i - 1]) + mapWidthFn(ary[i - 1], i - 1); |
- if (hi >= loVal) { |
- cb(ary[i - 1], i - 1); |
- } |
- } |
- if (i === ary.length) { |
- return; |
- } |
- |
- for (var n = ary.length; i < n; i++) { |
- var lo = mapLoFn(ary[i]); |
- if (lo >= hiVal) |
- break; |
- cb(ary[i], i); |
- } |
- } |
- |
- /** |
- * Non iterative version of iterateOverIntersectingIntervals. |
- * |
- * @return {Array} Array of elements in ary that intersect loVal, hiVal. |
- */ |
- function getIntersectingIntervals(ary, mapLoFn, mapWidthFn, loVal, hiVal) { |
- var tmp = []; |
- iterateOverIntersectingIntervals(ary, mapLoFn, mapWidthFn, loVal, hiVal, |
- function(d) { |
- tmp.push(d); |
- }); |
- return tmp; |
- } |
- |
- /** |
- * Finds the element in the array whose value is closest to |val|. |
- * |
- * The same restrictions on sortedness as for findLowIndexInSortedArray apply. |
- * |
- * @param {Array} ary An array of arbitrary objects. |
- * @param {function():*} mapFn Callback that produces a key value |
- * from an element in ary. |
- * @param {number} val Value for which to search. |
- * @param {number} maxDiff Maximum allowed difference in value between |val| |
- * and an element's value. |
- * @return {object} Object in the array whose value is closest to |val|, or |
- * null if no object is within range. |
- */ |
- function findClosestElementInSortedArray(ary, mapFn, val, maxDiff) { |
- if (ary.length === 0) |
- return null; |
- |
- var aftIdx = findLowIndexInSortedArray(ary, mapFn, val); |
- var befIdx = aftIdx > 0 ? aftIdx - 1 : 0; |
- |
- if (aftIdx === ary.length) |
- aftIdx -= 1; |
- |
- var befDiff = Math.abs(val - mapFn(ary[befIdx])); |
- var aftDiff = Math.abs(val - mapFn(ary[aftIdx])); |
- |
- if (befDiff > maxDiff && aftDiff > maxDiff) |
- return null; |
- |
- var idx = befDiff < aftDiff ? befIdx : aftIdx; |
- return ary[idx]; |
- } |
- |
- /** |
- * Finds the closest interval in the implicit array of intervals |
- * defined by ary, mapLoFn and mapHiFn. |
- * |
- * This function uses the same scheme as findLowIndexInSortedArray |
- * to define the intervals. The same restrictions on sortedness and |
- * non-overlappingness apply. |
- * |
- * @param {Array} ary An array of objects that can be converted into sorted |
- * nonoverlapping ranges [x,y) using the mapLoFn and mapHiFn. |
- * @param {function():*} mapLoFn Callback that produces the low value for the |
- * interval represented by an element in the array. |
- * @param {function():*} mapHiFn Callback that produces the high for the |
- * interval represented by an element in the array. |
- * @param {number} val The value for the search. |
- * @param {number} maxDiff Maximum allowed difference in value between |val| |
- * and an interval's low or high value. |
- * @return {interval} Interval in the array whose high or low value is closest |
- * to |val|, or null if no interval is within range. |
- */ |
- function findClosestIntervalInSortedIntervals(ary, mapLoFn, mapHiFn, val, |
- maxDiff) { |
- if (ary.length === 0) |
- return null; |
- |
- var idx = findLowIndexInSortedArray(ary, mapLoFn, val); |
- if (idx > 0) |
- idx -= 1; |
- |
- var hiInt = ary[idx]; |
- var loInt = hiInt; |
- |
- if (val > mapHiFn(hiInt) && idx + 1 < ary.length) |
- loInt = ary[idx + 1]; |
- |
- var loDiff = Math.abs(val - mapLoFn(loInt)); |
- var hiDiff = Math.abs(val - mapHiFn(hiInt)); |
- |
- if (loDiff > maxDiff && hiDiff > maxDiff) |
- return null; |
- |
- if (loDiff < hiDiff) |
- return loInt; |
- |
- return hiInt; |
- } |
- |
- return { |
- findLowIndexInSortedArray, |
- findHighIndexInSortedArray, |
- findIndexInSortedIntervals, |
- findIndexInSortedClosedIntervals, |
- iterateOverIntersectingIntervals, |
- getIntersectingIntervals, |
- findClosestElementInSortedArray, |
- findClosestIntervalInSortedIntervals, |
- }; |
-}); |
-</script> |