Intersect two sorted range lists.
(a: &[RowRange], b: &[RowRange])
| 147 | |
| 148 | /// Intersect two sorted range lists. |
| 149 | fn intersect_range_lists(a: &[RowRange], b: &[RowRange]) -> Vec<RowRange> { |
| 150 | let mut result = Vec::new(); |
| 151 | let (mut i, mut j) = (0, 0); |
| 152 | while i < a.len() && j < b.len() { |
| 153 | let from = a[i].from().max(b[j].from()); |
| 154 | let to = a[i].to().min(b[j].to()); |
| 155 | if from <= to { |
| 156 | result.push(RowRange::new(from, to)); |
| 157 | } |
| 158 | if a[i].to() < b[j].to() { |
| 159 | i += 1; |
| 160 | } else { |
| 161 | j += 1; |
| 162 | } |
| 163 | } |
| 164 | result |
| 165 | } |
| 166 | |
| 167 | #[cfg(test)] |
| 168 | mod tests { |
no test coverage detected