OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 cr.define('media', function() { | 5 cr.define('media', function() { |
6 | 6 |
7 /** | 7 /** |
8 * This class represents a collection of non-intersecting ranges. Ranges | 8 * This class represents a collection of non-intersecting ranges. Ranges |
9 * specified by (start, end) can be added and removed at will. It is used to | 9 * specified by (start, end) can be added and removed at will. It is used to |
10 * record which sections of a media file have been cached, e.g. the first and | 10 * record which sections of a media file have been cached, e.g. the first and |
11 * last few kB plus several MB in the middle. | 11 * last few kB plus several MB in the middle. |
12 * | 12 * |
13 * Example usage: | 13 * Example usage: |
14 * someRange.add(0, 100); // Contains 0-100. | 14 * someRange.add(0, 100); // Contains 0-100. |
15 * someRange.add(150, 200); // Contains 0-100, 150-200. | 15 * someRange.add(150, 200); // Contains 0-100, 150-200. |
16 * someRange.remove(25, 75); // Contains 0-24, 76-100, 150-200. | 16 * someRange.remove(25, 75); // Contains 0-24, 76-100, 150-200. |
17 * someRange.add(25, 149); // Contains 0-200. | 17 * someRange.add(25, 149); // Contains 0-200. |
18 */ | 18 */ |
19 function DisjointRangeSet() { | 19 function DisjointRangeSet() { |
20 this.ranges_ = {}; | 20 this.ranges_ = {}; |
21 }; | 21 } |
22 | 22 |
23 DisjointRangeSet.prototype = { | 23 DisjointRangeSet.prototype = { |
24 /** | 24 /** |
25 * Deletes all ranges intersecting with (start ... end) and returns the | 25 * Deletes all ranges intersecting with (start ... end) and returns the |
26 * extents of the cleared area. | 26 * extents of the cleared area. |
27 * @param {int} start The start of the range to remove. | 27 * @param {int} start The start of the range to remove. |
28 * @param {int} end The end of the range to remove. | 28 * @param {int} end The end of the range to remove. |
29 * @param {int} sloppiness 0 removes only strictly overlapping ranges, and | 29 * @param {int} sloppiness 0 removes only strictly overlapping ranges, and |
30 * 1 removes adjacent ones. | 30 * 1 removes adjacent ones. |
31 * @return {Object} The start and end of the newly cleared range. | 31 * @return {Object} The start and end of the newly cleared range. |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 for (var start in this.ranges_) | 136 for (var start in this.ranges_) |
137 max = Math.max(max, this.ranges_[start]); | 137 max = Math.max(max, this.ranges_[start]); |
138 return max; | 138 return max; |
139 }, | 139 }, |
140 }; | 140 }; |
141 | 141 |
142 return { | 142 return { |
143 DisjointRangeSet: DisjointRangeSet | 143 DisjointRangeSet: DisjointRangeSet |
144 }; | 144 }; |
145 }); | 145 }); |
OLD | NEW |