| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef MEDIA_BASE_RANGES_H_ | 5 #ifndef MEDIA_BASE_RANGES_H_ |
| 6 #define MEDIA_BASE_RANGES_H_ | 6 #define MEDIA_BASE_RANGES_H_ |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <ostream> | 9 #include <ostream> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 size_t size() const; | 32 size_t size() const; |
| 33 | 33 |
| 34 // Return the "i"'th range's start & end (0-based). | 34 // Return the "i"'th range's start & end (0-based). |
| 35 T start(int i) const; | 35 T start(int i) const; |
| 36 T end(int i) const; | 36 T end(int i) const; |
| 37 | 37 |
| 38 // Clear all ranges. | 38 // Clear all ranges. |
| 39 void clear(); | 39 void clear(); |
| 40 | 40 |
| 41 // Computes the intersection between this range and |other|. | 41 // Computes the intersection between this range and |other|. |
| 42 Ranges<T> IntersectionWith(const Ranges<T>& other); | 42 Ranges<T> IntersectionWith(const Ranges<T>& other) const; |
| 43 | 43 |
| 44 private: | 44 private: |
| 45 // Wrapper around DCHECK_LT allowing comparisons of operator<<'able T's. | 45 // Wrapper around DCHECK_LT allowing comparisons of operator<<'able T's. |
| 46 void DCheckLT(const T& lhs, const T& rhs) const; | 46 void DCheckLT(const T& lhs, const T& rhs) const; |
| 47 | 47 |
| 48 // Disjoint, in increasing order of start. | 48 // Disjoint, in increasing order of start. |
| 49 std::vector<std::pair<T, T> > ranges_; | 49 std::vector<std::pair<T, T> > ranges_; |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 ////////////////////////////////////////////////////////////////////// | 52 ////////////////////////////////////////////////////////////////////// |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 T Ranges<T>::end(int i) const { | 126 T Ranges<T>::end(int i) const { |
| 127 return ranges_[i].second; | 127 return ranges_[i].second; |
| 128 } | 128 } |
| 129 | 129 |
| 130 template<class T> | 130 template<class T> |
| 131 void Ranges<T>::clear() { | 131 void Ranges<T>::clear() { |
| 132 ranges_.clear(); | 132 ranges_.clear(); |
| 133 } | 133 } |
| 134 | 134 |
| 135 template<class T> | 135 template<class T> |
| 136 Ranges<T> Ranges<T>::IntersectionWith(const Ranges<T>& other) { | 136 Ranges<T> Ranges<T>::IntersectionWith(const Ranges<T>& other) const { |
| 137 Ranges<T> result; | 137 Ranges<T> result; |
| 138 | 138 |
| 139 size_t i = 0; | 139 size_t i = 0; |
| 140 size_t j = 0; | 140 size_t j = 0; |
| 141 | 141 |
| 142 while (i < size() && j < other.size()) { | 142 while (i < size() && j < other.size()) { |
| 143 T max_start = std::max(start(i), other.start(j)); | 143 T max_start = std::max(start(i), other.start(j)); |
| 144 T min_end = std::min(end(i), other.end(j)); | 144 T min_end = std::min(end(i), other.end(j)); |
| 145 | 145 |
| 146 // Add an intersection range to the result if the ranges overlap. | 146 // Add an intersection range to the result if the ranges overlap. |
| 147 if (max_start < min_end) | 147 if (max_start < min_end) |
| 148 result.Add(max_start, min_end); | 148 result.Add(max_start, min_end); |
| 149 | 149 |
| 150 if (end(i) < other.end(j)) | 150 if (end(i) < other.end(j)) |
| 151 ++i; | 151 ++i; |
| 152 else | 152 else |
| 153 ++j; | 153 ++j; |
| 154 } | 154 } |
| 155 | 155 |
| 156 return result; | 156 return result; |
| 157 } | 157 } |
| 158 | 158 |
| 159 } // namespace media | 159 } // namespace media |
| 160 | 160 |
| 161 #endif // MEDIA_BASE_RANGES_H_ | 161 #endif // MEDIA_BASE_RANGES_H_ |
| OLD | NEW |