@@ -668,6 +668,8 @@ impl<'a, T: Ord> Iterator<&'a T> for UnionItems<'a, T> {
668
668
}
669
669
670
670
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
671
+ // NOTE(stage0): Remove impl after a snapshot
672
+ #[ cfg( stage0) ]
671
673
impl < T : Ord + Clone > BitOr < TreeSet < T > , TreeSet < T > > for TreeSet < T > {
672
674
/// Returns the union of `self` and `rhs` as a new `TreeSet<T>`.
673
675
///
@@ -689,6 +691,30 @@ impl<T: Ord + Clone> BitOr<TreeSet<T>, TreeSet<T>> for TreeSet<T> {
689
691
}
690
692
691
693
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
694
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
695
+ impl < ' a , ' b , T : Ord + Clone > BitOr < & ' b TreeSet < T > , TreeSet < T > > for & ' a TreeSet < T > {
696
+ /// Returns the union of `self` and `rhs` as a new `TreeSet<T>`.
697
+ ///
698
+ /// # Examples
699
+ ///
700
+ /// ```
701
+ /// use std::collections::TreeSet;
702
+ ///
703
+ /// let a: TreeSet<int> = vec![1, 2, 3].into_iter().collect();
704
+ /// let b: TreeSet<int> = vec![3, 4, 5].into_iter().collect();
705
+ ///
706
+ /// let set: TreeSet<int> = &a | &b;
707
+ /// let v: Vec<int> = set.into_iter().collect();
708
+ /// assert_eq!(v, vec![1, 2, 3, 4, 5]);
709
+ /// ```
710
+ fn bitor ( self , rhs : & TreeSet < T > ) -> TreeSet < T > {
711
+ self . union ( rhs) . cloned ( ) . collect ( )
712
+ }
713
+ }
714
+
715
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
716
+ // NOTE(stage0): Remove impl after a snapshot
717
+ #[ cfg( stage0) ]
692
718
impl < T : Ord + Clone > BitAnd < TreeSet < T > , TreeSet < T > > for TreeSet < T > {
693
719
/// Returns the intersection of `self` and `rhs` as a new `TreeSet<T>`.
694
720
///
@@ -710,6 +736,30 @@ impl<T: Ord + Clone> BitAnd<TreeSet<T>, TreeSet<T>> for TreeSet<T> {
710
736
}
711
737
712
738
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
739
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
740
+ impl < ' a , ' b , T : Ord + Clone > BitAnd < & ' b TreeSet < T > , TreeSet < T > > for & ' a TreeSet < T > {
741
+ /// Returns the intersection of `self` and `rhs` as a new `TreeSet<T>`.
742
+ ///
743
+ /// # Examples
744
+ ///
745
+ /// ```
746
+ /// use std::collections::TreeSet;
747
+ ///
748
+ /// let a: TreeSet<int> = vec![1, 2, 3].into_iter().collect();
749
+ /// let b: TreeSet<int> = vec![2, 3, 4].into_iter().collect();
750
+ ///
751
+ /// let set: TreeSet<int> = &a & &b;
752
+ /// let v: Vec<int> = set.into_iter().collect();
753
+ /// assert_eq!(v, vec![2, 3]);
754
+ /// ```
755
+ fn bitand ( self , rhs : & TreeSet < T > ) -> TreeSet < T > {
756
+ self . intersection ( rhs) . cloned ( ) . collect ( )
757
+ }
758
+ }
759
+
760
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
761
+ // NOTE(stage0): Remove impl after a snapshot
762
+ #[ cfg( stage0) ]
713
763
impl < T : Ord + Clone > BitXor < TreeSet < T > , TreeSet < T > > for TreeSet < T > {
714
764
/// Returns the symmetric difference of `self` and `rhs` as a new `TreeSet<T>`.
715
765
///
@@ -731,6 +781,30 @@ impl<T: Ord + Clone> BitXor<TreeSet<T>, TreeSet<T>> for TreeSet<T> {
731
781
}
732
782
733
783
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
784
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
785
+ impl < ' a , ' b , T : Ord + Clone > BitXor < & ' b TreeSet < T > , TreeSet < T > > for & ' a TreeSet < T > {
786
+ /// Returns the symmetric difference of `self` and `rhs` as a new `TreeSet<T>`.
787
+ ///
788
+ /// # Examples
789
+ ///
790
+ /// ```
791
+ /// use std::collections::TreeSet;
792
+ ///
793
+ /// let a: TreeSet<int> = vec![1, 2, 3].into_iter().collect();
794
+ /// let b: TreeSet<int> = vec![3, 4, 5].into_iter().collect();
795
+ ///
796
+ /// let set: TreeSet<int> = &a ^ &b;
797
+ /// let v: Vec<int> = set.into_iter().collect();
798
+ /// assert_eq!(v, vec![1, 2, 4, 5]);
799
+ /// ```
800
+ fn bitxor ( self , rhs : & TreeSet < T > ) -> TreeSet < T > {
801
+ self . symmetric_difference ( rhs) . cloned ( ) . collect ( )
802
+ }
803
+ }
804
+
805
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
806
+ // NOTE(stage0): Remove impl after a snapshot
807
+ #[ cfg( stage0) ]
734
808
impl < T : Ord + Clone > Sub < TreeSet < T > , TreeSet < T > > for TreeSet < T > {
735
809
/// Returns the difference of `self` and `rhs` as a new `TreeSet<T>`.
736
810
///
@@ -751,6 +825,28 @@ impl<T: Ord + Clone> Sub<TreeSet<T>, TreeSet<T>> for TreeSet<T> {
751
825
}
752
826
}
753
827
828
+ #[ unstable = "matches collection reform specification, waiting for dust to settle" ]
829
+ #[ cfg( not( stage0) ) ] // NOTE(stage0): Remove cfg after a snapshot
830
+ impl < ' a , ' b , T : Ord + Clone > Sub < & ' b TreeSet < T > , TreeSet < T > > for & ' a TreeSet < T > {
831
+ /// Returns the difference of `self` and `rhs` as a new `TreeSet<T>`.
832
+ ///
833
+ /// # Examples
834
+ ///
835
+ /// ```
836
+ /// use std::collections::TreeSet;
837
+ ///
838
+ /// let a: TreeSet<int> = vec![1, 2, 3].into_iter().collect();
839
+ /// let b: TreeSet<int> = vec![3, 4, 5].into_iter().collect();
840
+ ///
841
+ /// let set: TreeSet<int> = &a - &b;
842
+ /// let v: Vec<int> = set.into_iter().collect();
843
+ /// assert_eq!(v, vec![1, 2]);
844
+ /// ```
845
+ fn sub ( self , rhs : & TreeSet < T > ) -> TreeSet < T > {
846
+ self . difference ( rhs) . cloned ( ) . collect ( )
847
+ }
848
+ }
849
+
754
850
impl < T : Ord > FromIterator < T > for TreeSet < T > {
755
851
fn from_iter < Iter : Iterator < T > > ( iter : Iter ) -> TreeSet < T > {
756
852
let mut set = TreeSet :: new ( ) ;
@@ -1032,7 +1128,7 @@ mod test {
1032
1128
let a: TreeSet < int > = vec ! [ 1 , 3 , 5 , 9 , 11 , 16 , 19 , 24 ] . into_iter ( ) . collect ( ) ;
1033
1129
let b: TreeSet < int > = vec ! [ -2 , 1 , 5 , 9 , 13 , 19 ] . into_iter ( ) . collect ( ) ;
1034
1130
1035
- let set: TreeSet < int > = a | b;
1131
+ let set: TreeSet < int > = & a | & b;
1036
1132
let v: Vec < int > = set. into_iter ( ) . collect ( ) ;
1037
1133
assert_eq ! ( v, vec![ -2 , 1 , 3 , 5 , 9 , 11 , 13 , 16 , 19 , 24 ] ) ;
1038
1134
}
@@ -1042,7 +1138,7 @@ mod test {
1042
1138
let a: TreeSet < int > = vec ! [ 11 , 1 , 3 , 77 , 103 , 5 , -5 ] . into_iter ( ) . collect ( ) ;
1043
1139
let b: TreeSet < int > = vec ! [ 2 , 11 , 77 , -9 , -42 , 5 , 3 ] . into_iter ( ) . collect ( ) ;
1044
1140
1045
- let set: TreeSet < int > = a & b;
1141
+ let set: TreeSet < int > = & a & & b;
1046
1142
let v: Vec < int > = set. into_iter ( ) . collect ( ) ;
1047
1143
assert_eq ! ( v, vec![ 3 , 5 , 11 , 77 ] ) ;
1048
1144
}
@@ -1052,7 +1148,7 @@ mod test {
1052
1148
let a: TreeSet < int > = vec ! [ 1 , 3 , 5 , 9 , 11 ] . into_iter ( ) . collect ( ) ;
1053
1149
let b: TreeSet < int > = vec ! [ -2 , 3 , 9 , 14 , 22 ] . into_iter ( ) . collect ( ) ;
1054
1150
1055
- let set: TreeSet < int > = a ^ b;
1151
+ let set: TreeSet < int > = & a ^ & b;
1056
1152
let v: Vec < int > = set. into_iter ( ) . collect ( ) ;
1057
1153
assert_eq ! ( v, vec![ -2 , 1 , 5 , 11 , 14 , 22 ] ) ;
1058
1154
}
@@ -1062,7 +1158,7 @@ mod test {
1062
1158
let a: TreeSet < int > = vec ! [ -5 , 11 , 22 , 33 , 40 , 42 ] . into_iter ( ) . collect ( ) ;
1063
1159
let b: TreeSet < int > = vec ! [ -12 , -5 , 14 , 23 , 34 , 38 , 39 , 50 ] . into_iter ( ) . collect ( ) ;
1064
1160
1065
- let set: TreeSet < int > = a - b;
1161
+ let set: TreeSet < int > = & a - & b;
1066
1162
let v: Vec < int > = set. into_iter ( ) . collect ( ) ;
1067
1163
assert_eq ! ( v, vec![ 11 , 22 , 33 , 40 , 42 ] ) ;
1068
1164
}
0 commit comments