@@ -443,6 +443,8 @@ impl<T: Ord> Default for BTreeSet<T> {
443
443
}
444
444
445
445
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
446
+ // NOTE(stage0): Remove impl after a snapshot
447
+ #[ cfg( stage0) ]
446
448
impl < T : Ord + Clone > Sub < BTreeSet < T > , BTreeSet < T > > for BTreeSet < T > {
447
449
/// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`.
448
450
///
@@ -464,6 +466,30 @@ impl<T: Ord + Clone> Sub<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
464
466
}
465
467
466
468
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
469
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
470
+ impl < ' a , ' b , T : Ord + Clone > Sub < & ' b BTreeSet < T > , BTreeSet < T > > for & ' a BTreeSet < T > {
471
+ /// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`.
472
+ ///
473
+ /// # Examples
474
+ ///
475
+ /// ```
476
+ /// use std::collections::BTreeSet;
477
+ ///
478
+ /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
479
+ /// let b: BTreeSet<int> = vec![3, 4, 5].into_iter().collect();
480
+ ///
481
+ /// let result: BTreeSet<int> = &a - &b;
482
+ /// let result_vec: Vec<int> = result.into_iter().collect();
483
+ /// assert_eq!(result_vec, vec![1, 2]);
484
+ /// ```
485
+ fn sub ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
486
+ self . difference ( rhs) . cloned ( ) . collect ( )
487
+ }
488
+ }
489
+
490
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
491
+ // NOTE(stage0): Remove impl after a snapshot
492
+ #[ cfg( stage0) ]
467
493
impl < T : Ord + Clone > BitXor < BTreeSet < T > , BTreeSet < T > > for BTreeSet < T > {
468
494
/// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`.
469
495
///
@@ -485,6 +511,30 @@ impl<T: Ord + Clone> BitXor<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
485
511
}
486
512
487
513
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
514
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
515
+ impl < ' a , ' b , T : Ord + Clone > BitXor < & ' b BTreeSet < T > , BTreeSet < T > > for & ' a BTreeSet < T > {
516
+ /// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`.
517
+ ///
518
+ /// # Examples
519
+ ///
520
+ /// ```
521
+ /// use std::collections::BTreeSet;
522
+ ///
523
+ /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
524
+ /// let b: BTreeSet<int> = vec![2, 3, 4].into_iter().collect();
525
+ ///
526
+ /// let result: BTreeSet<int> = &a ^ &b;
527
+ /// let result_vec: Vec<int> = result.into_iter().collect();
528
+ /// assert_eq!(result_vec, vec![1, 4]);
529
+ /// ```
530
+ fn bitxor ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
531
+ self . symmetric_difference ( rhs) . cloned ( ) . collect ( )
532
+ }
533
+ }
534
+
535
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
536
+ // NOTE(stage0): Remove impl after a snapshot
537
+ #[ cfg( stage0) ]
488
538
impl < T : Ord + Clone > BitAnd < BTreeSet < T > , BTreeSet < T > > for BTreeSet < T > {
489
539
/// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`.
490
540
///
@@ -506,6 +556,30 @@ impl<T: Ord + Clone> BitAnd<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
506
556
}
507
557
508
558
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
559
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
560
+ impl < ' a , ' b , T : Ord + Clone > BitAnd < & ' b BTreeSet < T > , BTreeSet < T > > for & ' a BTreeSet < T > {
561
+ /// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`.
562
+ ///
563
+ /// # Examples
564
+ ///
565
+ /// ```
566
+ /// use std::collections::BTreeSet;
567
+ ///
568
+ /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
569
+ /// let b: BTreeSet<int> = vec![2, 3, 4].into_iter().collect();
570
+ ///
571
+ /// let result: BTreeSet<int> = &a & &b;
572
+ /// let result_vec: Vec<int> = result.into_iter().collect();
573
+ /// assert_eq!(result_vec, vec![2, 3]);
574
+ /// ```
575
+ fn bitand ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
576
+ self . intersection ( rhs) . cloned ( ) . collect ( )
577
+ }
578
+ }
579
+
580
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
581
+ // NOTE(stage0): Remove impl after a snapshot
582
+ #[ cfg( stage0) ]
509
583
impl < T : Ord + Clone > BitOr < BTreeSet < T > , BTreeSet < T > > for BTreeSet < T > {
510
584
/// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`.
511
585
///
@@ -526,6 +600,28 @@ impl<T: Ord + Clone> BitOr<BTreeSet<T>,BTreeSet<T>> for BTreeSet<T> {
526
600
}
527
601
}
528
602
603
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
604
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
605
+ impl < ' a , ' b , T : Ord + Clone > BitOr < & ' b BTreeSet < T > , BTreeSet < T > > for & ' a BTreeSet < T > {
606
+ /// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`.
607
+ ///
608
+ /// # Examples
609
+ ///
610
+ /// ```
611
+ /// use std::collections::BTreeSet;
612
+ ///
613
+ /// let a: BTreeSet<int> = vec![1, 2, 3].into_iter().collect();
614
+ /// let b: BTreeSet<int> = vec![3, 4, 5].into_iter().collect();
615
+ ///
616
+ /// let result: BTreeSet<int> = &a | &b;
617
+ /// let result_vec: Vec<int> = result.into_iter().collect();
618
+ /// assert_eq!(result_vec, vec![1, 2, 3, 4, 5]);
619
+ /// ```
620
+ fn bitor ( self , rhs : & BTreeSet < T > ) -> BTreeSet < T > {
621
+ self . union ( rhs) . cloned ( ) . collect ( )
622
+ }
623
+ }
624
+
529
625
impl < T : Show > Show for BTreeSet < T > {
530
626
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
531
627
try!( write ! ( f, "{{" ) ) ;
0 commit comments