@@ -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