Index: chrome/browser/resources/media_internals/disjoint_range_set.js |
=================================================================== |
--- chrome/browser/resources/media_internals/disjoint_range_set.js (revision 179909) |
+++ chrome/browser/resources/media_internals/disjoint_range_set.js (working copy) |
@@ -1,145 +0,0 @@ |
-// Copyright (c) 2011 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. |
- |
-cr.define('media', function() { |
- |
- /** |
- * This class represents a collection of non-intersecting ranges. Ranges |
- * specified by (start, end) can be added and removed at will. It is used to |
- * record which sections of a media file have been cached, e.g. the first and |
- * last few kB plus several MB in the middle. |
- * |
- * Example usage: |
- * someRange.add(0, 100); // Contains 0-100. |
- * someRange.add(150, 200); // Contains 0-100, 150-200. |
- * someRange.remove(25, 75); // Contains 0-24, 76-100, 150-200. |
- * someRange.add(25, 149); // Contains 0-200. |
- */ |
- function DisjointRangeSet() { |
- this.ranges_ = {}; |
- } |
- |
- DisjointRangeSet.prototype = { |
- /** |
- * Deletes all ranges intersecting with (start ... end) and returns the |
- * extents of the cleared area. |
- * @param {int} start The start of the range to remove. |
- * @param {int} end The end of the range to remove. |
- * @param {int} sloppiness 0 removes only strictly overlapping ranges, and |
- * 1 removes adjacent ones. |
- * @return {Object} The start and end of the newly cleared range. |
- */ |
- clearRange: function(start, end, sloppiness) { |
- var ranges = this.ranges_; |
- var result = {start: start, end: end}; |
- |
- for (var rangeStart in this.ranges_) { |
- rangeEnd = this.ranges_[rangeStart]; |
- // A range intersects another if its start lies within the other range |
- // or vice versa. |
- if ((rangeStart >= start && rangeStart <= (end + sloppiness)) || |
- (start >= rangeStart && start <= (rangeEnd + sloppiness))) { |
- delete ranges[rangeStart]; |
- result.start = Math.min(result.start, rangeStart); |
- result.end = Math.max(result.end, rangeEnd); |
- } |
- } |
- |
- return result; |
- }, |
- |
- /** |
- * Adds a range to this DisjointRangeSet. |
- * Joins adjacent and overlapping ranges together. |
- * @param {int} start The beginning of the range to add, inclusive. |
- * @param {int} end The end of the range to add, inclusive. |
- */ |
- add: function(start, end) { |
- if (end < start) |
- return; |
- |
- // Remove all touching ranges. |
- result = this.clearRange(start, end, 1); |
- // Add back a single contiguous range. |
- this.ranges_[Math.min(start, result.start)] = Math.max(end, result.end); |
- }, |
- |
- /** |
- * Combines a DisjointRangeSet with this one. |
- * @param {DisjointRangeSet} ranges A DisjointRangeSet to be squished into |
- * this one. |
- */ |
- merge: function(other) { |
- var ranges = this; |
- other.forEach(function(start, end) { ranges.add(start, end); }); |
- }, |
- |
- /** |
- * Removes a range from this DisjointRangeSet. |
- * Will split existing ranges if necessary. |
- * @param {int} start The beginning of the range to remove, inclusive. |
- * @param {int} end The end of the range to remove, inclusive. |
- */ |
- remove: function(start, end) { |
- if (end < start) |
- return; |
- |
- // Remove instersecting ranges. |
- result = this.clearRange(start, end, 0); |
- |
- // Add back non-overlapping ranges. |
- if (result.start < start) |
- this.ranges_[result.start] = start - 1; |
- if (result.end > end) |
- this.ranges_[end + 1] = result.end; |
- }, |
- |
- /** |
- * Iterates over every contiguous range in this DisjointRangeSet, calling a |
- * function for each (start, end). |
- * @param {function(int, int)} iterator The function to call on each range. |
- */ |
- forEach: function(iterator) { |
- for (var start in this.ranges_) |
- iterator(start, this.ranges_[start]); |
- }, |
- |
- /** |
- * Maps this DisjointRangeSet to an array by calling a given function on the |
- * start and end of each contiguous range, sorted by start. |
- * @param {function(int, int)} mapper Maps a range to an array element. |
- * @return {Array} An array of each mapper(range). |
- */ |
- map: function(mapper) { |
- var starts = []; |
- for (var start in this.ranges_) |
- starts.push(parseInt(start)); |
- starts.sort(function(a, b) { |
- return a - b; |
- }); |
- |
- var ranges = this.ranges_; |
- var results = starts.map(function(s) { |
- return mapper(s, ranges[s]); |
- }); |
- |
- return results; |
- }, |
- |
- /** |
- * Finds the maximum value present in any of the contained ranges. |
- * @return {int} The maximum value contained by this DisjointRangeSet. |
- */ |
- max: function() { |
- var max = -Infinity; |
- for (var start in this.ranges_) |
- max = Math.max(max, this.ranges_[start]); |
- return max; |
- }, |
- }; |
- |
- return { |
- DisjointRangeSet: DisjointRangeSet |
- }; |
-}); |