diff options
| author | Jorge Aparicio <japaricious@gmail.com> | 2014-12-13 16:34:36 -0500 |
|---|---|---|
| committer | Jorge Aparicio <japaricious@gmail.com> | 2014-12-13 20:16:34 -0500 |
| commit | 89d2061c8f1cc2bcd5e9bb8a97e214f482d5ff2c (patch) | |
| tree | 580df453825bc5fd18624e8de6bf5d94b36f9206 /src | |
| parent | e00e4611a82641c61dd694ce9aa675b9d8ecf9a8 (diff) | |
| download | rust-89d2061c8f1cc2bcd5e9bb8a97e214f482d5ff2c.tar.gz rust-89d2061c8f1cc2bcd5e9bb8a97e214f482d5ff2c.zip | |
libcollections: convert `BTreeSet` binops to by value
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcollections/btree/set.rs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/libcollections/btree/set.rs b/src/libcollections/btree/set.rs index cd01c008fe1..d4c05e4b7d3 100644 --- a/src/libcollections/btree/set.rs +++ b/src/libcollections/btree/set.rs @@ -409,6 +409,8 @@ impl<T: Ord> Default for BTreeSet<T> { } #[unstable = "matches collection reform specification, waiting for dust to settle"] +// NOTE(stage0): Remove impl after a snapshot +#[cfg(stage0)] impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { /// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`. /// @@ -430,6 +432,30 @@ impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { } #[unstable = "matches collection reform specification, waiting for dust to settle"] +#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot +impl<'a, 'b, T: Ord + Clone> Sub<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> { + /// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::BTreeSet; + /// + /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect(); + /// let b: BTreeSet<int> = vec![3, 4, 5].into_iter().collect(); + /// + /// let result: BTreeSet<int> = &a - &b; + /// let result_vec: Vec<int> = result.into_iter().collect(); + /// assert_eq!(result_vec, vec![1, 2]); + /// ``` + fn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T> { + self.difference(rhs).cloned().collect() + } +} + +#[unstable = "matches collection reform specification, waiting for dust to settle"] +// NOTE(stage0): Remove impl after a snapshot +#[cfg(stage0)] impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { /// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`. /// @@ -451,6 +477,30 @@ impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { } #[unstable = "matches collection reform specification, waiting for dust to settle"] +#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot +impl<'a, 'b, T: Ord + Clone> BitXor<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> { + /// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::BTreeSet; + /// + /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect(); + /// let b: BTreeSet<int> = vec![2, 3, 4].into_iter().collect(); + /// + /// let result: BTreeSet<int> = &a ^ &b; + /// let result_vec: Vec<int> = result.into_iter().collect(); + /// assert_eq!(result_vec, vec![1, 4]); + /// ``` + fn bitxor(self, rhs: &BTreeSet<T>) -> BTreeSet<T> { + self.symmetric_difference(rhs).cloned().collect() + } +} + +#[unstable = "matches collection reform specification, waiting for dust to settle"] +// NOTE(stage0): Remove impl after a snapshot +#[cfg(stage0)] impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { /// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`. /// @@ -472,6 +522,30 @@ impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { } #[unstable = "matches collection reform specification, waiting for dust to settle"] +#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot +impl<'a, 'b, T: Ord + Clone> BitAnd<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> { + /// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::BTreeSet; + /// + /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect(); + /// let b: BTreeSet<int> = vec![2, 3, 4].into_iter().collect(); + /// + /// let result: BTreeSet<int> = &a & &b; + /// let result_vec: Vec<int> = result.into_iter().collect(); + /// assert_eq!(result_vec, vec![2, 3]); + /// ``` + fn bitand(self, rhs: &BTreeSet<T>) -> BTreeSet<T> { + self.intersection(rhs).cloned().collect() + } +} + +#[unstable = "matches collection reform specification, waiting for dust to settle"] +// NOTE(stage0): Remove impl after a snapshot +#[cfg(stage0)] impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { /// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`. /// @@ -492,6 +566,28 @@ impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> { } } +#[unstable = "matches collection reform specification, waiting for dust to settle"] +#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot +impl<'a, 'b, T: Ord + Clone> BitOr<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> { + /// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::BTreeSet; + /// + /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect(); + /// let b: BTreeSet<int> = vec![3, 4, 5].into_iter().collect(); + /// + /// let result: BTreeSet<int> = &a | &b; + /// let result_vec: Vec<int> = result.into_iter().collect(); + /// assert_eq!(result_vec, vec![1, 2, 3, 4, 5]); + /// ``` + fn bitor(self, rhs: &BTreeSet<T>) -> BTreeSet<T> { + self.union(rhs).cloned().collect() + } +} + impl<T: Show> Show for BTreeSet<T> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(write!(f, "{{")); |
