Skip to content

Commit 89d2061

Browse files
author
Jorge Aparicio
committed
libcollections: convert BTreeSet binops to by value
1 parent e00e461 commit 89d2061

File tree

1 file changed

+96
-0
lines changed
  • src/libcollections/btree

1 file changed

+96
-0
lines changed

src/libcollections/btree/set.rs

+96
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,8 @@ impl<T: Ord> Default for BTreeSet<T> {
409409
}
410410

411411
#[unstable = "matches collection reform specification, waiting for dust to settle"]
412+
// NOTE(stage0): Remove impl after a snapshot
413+
#[cfg(stage0)]
412414
impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
413415
/// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`.
414416
///
@@ -430,6 +432,30 @@ impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
430432
}
431433

432434
#[unstable = "matches collection reform specification, waiting for dust to settle"]
435+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
436+
impl<'a, 'b, T: Ord + Clone> Sub<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> {
437+
/// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`.
438+
///
439+
/// # Examples
440+
///
441+
/// ```
442+
/// use std::collections::BTreeSet;
443+
///
444+
/// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
445+
/// let b: BTreeSet<int> = vec![3, 4, 5].into_iter().collect();
446+
///
447+
/// let result: BTreeSet<int> = &a - &b;
448+
/// let result_vec: Vec<int> = result.into_iter().collect();
449+
/// assert_eq!(result_vec, vec![1, 2]);
450+
/// ```
451+
fn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {
452+
self.difference(rhs).cloned().collect()
453+
}
454+
}
455+
456+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
457+
// NOTE(stage0): Remove impl after a snapshot
458+
#[cfg(stage0)]
433459
impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
434460
/// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`.
435461
///
@@ -451,6 +477,30 @@ impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
451477
}
452478

453479
#[unstable = "matches collection reform specification, waiting for dust to settle"]
480+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
481+
impl<'a, 'b, T: Ord + Clone> BitXor<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> {
482+
/// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`.
483+
///
484+
/// # Examples
485+
///
486+
/// ```
487+
/// use std::collections::BTreeSet;
488+
///
489+
/// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
490+
/// let b: BTreeSet<int> = vec![2, 3, 4].into_iter().collect();
491+
///
492+
/// let result: BTreeSet<int> = &a ^ &b;
493+
/// let result_vec: Vec<int> = result.into_iter().collect();
494+
/// assert_eq!(result_vec, vec![1, 4]);
495+
/// ```
496+
fn bitxor(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {
497+
self.symmetric_difference(rhs).cloned().collect()
498+
}
499+
}
500+
501+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
502+
// NOTE(stage0): Remove impl after a snapshot
503+
#[cfg(stage0)]
454504
impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
455505
/// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`.
456506
///
@@ -472,6 +522,30 @@ impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
472522
}
473523

474524
#[unstable = "matches collection reform specification, waiting for dust to settle"]
525+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
526+
impl<'a, 'b, T: Ord + Clone> BitAnd<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> {
527+
/// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`.
528+
///
529+
/// # Examples
530+
///
531+
/// ```
532+
/// use std::collections::BTreeSet;
533+
///
534+
/// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
535+
/// let b: BTreeSet<int> = vec![2, 3, 4].into_iter().collect();
536+
///
537+
/// let result: BTreeSet<int> = &a & &b;
538+
/// let result_vec: Vec<int> = result.into_iter().collect();
539+
/// assert_eq!(result_vec, vec![2, 3]);
540+
/// ```
541+
fn bitand(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {
542+
self.intersection(rhs).cloned().collect()
543+
}
544+
}
545+
546+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
547+
// NOTE(stage0): Remove impl after a snapshot
548+
#[cfg(stage0)]
475549
impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
476550
/// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`.
477551
///
@@ -492,6 +566,28 @@ impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
492566
}
493567
}
494568

569+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
570+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
571+
impl<'a, 'b, T: Ord + Clone> BitOr<&'b BTreeSet<T>, BTreeSet<T>> for &'a BTreeSet<T> {
572+
/// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`.
573+
///
574+
/// # Examples
575+
///
576+
/// ```
577+
/// use std::collections::BTreeSet;
578+
///
579+
/// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
580+
/// let b: BTreeSet<int> = vec![3, 4, 5].into_iter().collect();
581+
///
582+
/// let result: BTreeSet<int> = &a | &b;
583+
/// let result_vec: Vec<int> = result.into_iter().collect();
584+
/// assert_eq!(result_vec, vec![1, 2, 3, 4, 5]);
585+
/// ```
586+
fn bitor(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {
587+
self.union(rhs).cloned().collect()
588+
}
589+
}
590+
495591
impl<T: Show> Show for BTreeSet<T> {
496592
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
497593
try!(write!(f, "{{"));

0 commit comments

Comments
 (0)