From 0ac520631a861e2ce5e652ac5413035f5913d138 Mon Sep 17 00:00:00 2001 From: Seth Fowler Date: Wed, 26 Jun 2013 15:45:03 -0700 Subject: [PATCH] Add utility methods to Range --- src/components/util/range.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/components/util/range.rs b/src/components/util/range.rs index 3b55c48f8d0e..72719a97f8de 100644 --- a/src/components/util/range.rs +++ b/src/components/util/range.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use std::uint; +use std::cmp::{max, min}; enum RangeRelation { OverlapsBegin(/* overlap */ uint), @@ -51,6 +52,10 @@ impl Range { self.begin() < s.len() && self.end() <= s.len() && self.length() <= s.len() } + pub fn is_empty(&self) -> bool { + self.len == 0 + } + pub fn shift_by(&mut self, i: int) { self.off = ((self.off as int) + i) as uint; } @@ -73,6 +78,17 @@ impl Range { self.len = len_i; } + pub fn intersect(&self, other: &Range) -> Range { + let begin = max(self.begin(), other.begin()); + let end = min(self.end(), other.end()); + + if end < begin { + Range::empty() + } else { + Range::new(begin, end - begin) + } + } + /// Computes the relationship between two ranges (`self` and `other`), /// from the point of view of `self`. So, 'EntirelyBefore' means /// that the `self` range is entirely before `other` range.