diff options
| author | Daniel Micay <danielmicay@gmail.com> | 2013-01-29 16:07:11 -0500 |
|---|---|---|
| committer | Daniel Micay <danielmicay@gmail.com> | 2013-01-29 21:30:55 -0500 |
| commit | bfa9c9a00f0a301a5e936ae14c6a95e98f3bf5ee (patch) | |
| tree | e33dfb72ff0f626edd999008648aa26c9e871cf2 /src/libstd | |
| parent | 456af7a79da586a3c64d810a9157bba0616b6b53 (diff) | |
add is_subset and is_superset to the Set trait
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/treemap.rs | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index ed06d6a34b5..ece120bb647 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -291,6 +291,43 @@ impl <T: Ord> TreeSet<T>: Set<T> { /// Remove a value from the set. Return true if the value was /// present in the set. fn remove(&mut self, value: &T) -> bool { self.map.remove(value) } + + /// Return true if the set is a subset of another + pure fn is_subset(&self, other: &TreeSet<T>) -> bool { + other.is_superset(self) + } + + /// Return true if the set is a superset of another + pure fn is_superset(&self, other: &TreeSet<T>) -> bool { + let mut x = self.iter(); + let mut y = other.iter(); + unsafe { // purity workaround + x = x.next(); + y = y.next(); + let mut a = x.get(); + let mut b = y.get(); + while b.is_some() { + if a.is_none() { + return false + } + + let a1 = a.unwrap(); + let b1 = b.unwrap(); + + if b1 < a1 { + return false + } + + if !(a1 < b1) { + y = y.next(); + b = y.get(); + } + x = x.next(); + a = x.get(); + } + } + true + } } impl <T: Ord> TreeSet<T> { @@ -335,43 +372,6 @@ impl <T: Ord> TreeSet<T> { true } - /// Check of the set is a subset of another - pure fn is_subset(&self, other: &TreeSet<T>) -> bool { - other.is_superset(self) - } - - /// Check of the set is a superset of another - pure fn is_superset(&self, other: &TreeSet<T>) -> bool { - let mut x = self.iter(); - let mut y = other.iter(); - unsafe { // purity workaround - x = x.next(); - y = y.next(); - let mut a = x.get(); - let mut b = y.get(); - while b.is_some() { - if a.is_none() { - return false - } - - let a1 = a.unwrap(); - let b1 = b.unwrap(); - - if b1 < a1 { - return false - } - - if !(a1 < b1) { - y = y.next(); - b = y.get(); - } - x = x.next(); - a = x.get(); - } - } - true - } - /// Visit the values (in-order) representing the difference pure fn difference(&self, other: &TreeSet<T>, f: fn(&T) -> bool) { let mut x = self.iter(); |
