@@ -409,6 +409,8 @@ impl<T: Ord> Default for BTreeSet<T> {
409
409
}
410
410
411
411
#[unstable = "matches collection reform specification, waiting for dust to settle"]
412
+ // NOTE(stage0): Remove impl after a snapshot
413
+ #[cfg(stage0)]
412
414
impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
413
415
/// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`.
414
416
///
@@ -430,6 +432,30 @@ impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
430
432
}
431
433
432
434
#[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)]
433
459
impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
434
460
/// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`.
435
461
///
@@ -451,6 +477,30 @@ impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
451
477
}
452
478
453
479
#[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)]
454
504
impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
455
505
/// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`.
456
506
///
@@ -472,6 +522,30 @@ impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
472
522
}
473
523
474
524
#[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)]
475
549
impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
476
550
/// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`.
477
551
///
@@ -492,6 +566,28 @@ impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
492
566
}
493
567
}
494
568
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
+
495
591
impl<T: Show> Show for BTreeSet<T> {
496
592
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
497
593
try!(write!(f, "{{"));
0 commit comments