Skip to content

Commit 3084604

Browse files
author
Jorge Aparicio
committed
libcollections: convert TrieSet binops to by value
1 parent dff2b39 commit 3084604

File tree

1 file changed

+100
-4
lines changed

1 file changed

+100
-4
lines changed

src/libcollections/trie/set.rs

+100-4
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,8 @@ impl Extend<uint> for TrieSet {
462462
}
463463
}
464464

465+
// NOTE(stage0): Remove impl after a snapshot
466+
#[cfg(stage0)]
465467
#[unstable = "matches collection reform specification, waiting for dust to settle"]
466468
impl BitOr<TrieSet, TrieSet> for TrieSet {
467469
/// Returns the union of `self` and `rhs` as a new `TrieSet`.
@@ -483,6 +485,30 @@ impl BitOr<TrieSet, TrieSet> for TrieSet {
483485
}
484486
}
485487

488+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
489+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
490+
impl<'a, 'b> BitOr<&'b TrieSet, TrieSet> for &'a TrieSet {
491+
/// Returns the union of `self` and `rhs` as a new `TrieSet`.
492+
///
493+
/// # Example
494+
///
495+
/// ```
496+
/// use std::collections::TrieSet;
497+
///
498+
/// let a: TrieSet = vec![1, 2, 3].into_iter().collect();
499+
/// let b: TrieSet = vec![3, 4, 5].into_iter().collect();
500+
///
501+
/// let set: TrieSet = &a | &b;
502+
/// let v: Vec<uint> = set.iter().collect();
503+
/// assert_eq!(v, vec![1u, 2, 3, 4, 5]);
504+
/// ```
505+
fn bitor(self, rhs: &TrieSet) -> TrieSet {
506+
self.union(rhs).collect()
507+
}
508+
}
509+
510+
// NOTE(stage0): Remove impl after a snapshot
511+
#[cfg(stage0)]
486512
#[unstable = "matches collection reform specification, waiting for dust to settle"]
487513
impl BitAnd<TrieSet, TrieSet> for TrieSet {
488514
/// Returns the intersection of `self` and `rhs` as a new `TrieSet`.
@@ -504,6 +530,30 @@ impl BitAnd<TrieSet, TrieSet> for TrieSet {
504530
}
505531
}
506532

533+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
534+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
535+
impl<'a, 'b> BitAnd<&'b TrieSet, TrieSet> for &'a TrieSet {
536+
/// Returns the intersection of `self` and `rhs` as a new `TrieSet`.
537+
///
538+
/// # Example
539+
///
540+
/// ```
541+
/// use std::collections::TrieSet;
542+
///
543+
/// let a: TrieSet = vec![1, 2, 3].into_iter().collect();
544+
/// let b: TrieSet = vec![2, 3, 4].into_iter().collect();
545+
///
546+
/// let set: TrieSet = &a & &b;
547+
/// let v: Vec<uint> = set.iter().collect();
548+
/// assert_eq!(v, vec![2u, 3]);
549+
/// ```
550+
fn bitand(self, rhs: &TrieSet) -> TrieSet {
551+
self.intersection(rhs).collect()
552+
}
553+
}
554+
555+
// NOTE(stage0): Remove impl after a snapshot
556+
#[cfg(stage0)]
507557
#[unstable = "matches collection reform specification, waiting for dust to settle"]
508558
impl BitXor<TrieSet, TrieSet> for TrieSet {
509559
/// Returns the symmetric difference of `self` and `rhs` as a new `TrieSet`.
@@ -525,6 +575,30 @@ impl BitXor<TrieSet, TrieSet> for TrieSet {
525575
}
526576
}
527577

578+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
579+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
580+
impl<'a, 'b> BitXor<&'b TrieSet, TrieSet> for &'a TrieSet {
581+
/// Returns the symmetric difference of `self` and `rhs` as a new `TrieSet`.
582+
///
583+
/// # Example
584+
///
585+
/// ```
586+
/// use std::collections::TrieSet;
587+
///
588+
/// let a: TrieSet = vec![1, 2, 3].into_iter().collect();
589+
/// let b: TrieSet = vec![3, 4, 5].into_iter().collect();
590+
///
591+
/// let set: TrieSet = &a ^ &b;
592+
/// let v: Vec<uint> = set.iter().collect();
593+
/// assert_eq!(v, vec![1u, 2, 4, 5]);
594+
/// ```
595+
fn bitxor(self, rhs: &TrieSet) -> TrieSet {
596+
self.symmetric_difference(rhs).collect()
597+
}
598+
}
599+
600+
// NOTE(stage0): Remove impl after a snapshot
601+
#[cfg(stage0)]
528602
#[unstable = "matches collection reform specification, waiting for dust to settle"]
529603
impl Sub<TrieSet, TrieSet> for TrieSet {
530604
/// Returns the difference of `self` and `rhs` as a new `TrieSet`.
@@ -546,6 +620,28 @@ impl Sub<TrieSet, TrieSet> for TrieSet {
546620
}
547621
}
548622

623+
#[cfg(not(stage0))] // NOTE(stage0): Remove cfg after a snapshot
624+
#[unstable = "matches collection reform specification, waiting for dust to settle"]
625+
impl<'a, 'b> Sub<&'b TrieSet, TrieSet> for &'a TrieSet {
626+
/// Returns the difference of `self` and `rhs` as a new `TrieSet`.
627+
///
628+
/// # Example
629+
///
630+
/// ```
631+
/// use std::collections::TrieSet;
632+
///
633+
/// let a: TrieSet = vec![1, 2, 3].into_iter().collect();
634+
/// let b: TrieSet = vec![3, 4, 5].into_iter().collect();
635+
///
636+
/// let set: TrieSet = &a - &b;
637+
/// let v: Vec<uint> = set.iter().collect();
638+
/// assert_eq!(v, vec![1u, 2]);
639+
/// ```
640+
fn sub(self, rhs: &TrieSet) -> TrieSet {
641+
self.difference(rhs).collect()
642+
}
643+
}
644+
549645
/// A forward iterator over a set.
550646
pub struct SetItems<'a> {
551647
iter: Entries<'a, ()>
@@ -837,7 +933,7 @@ mod test {
837933
let a: TrieSet = vec![1, 2, 3].into_iter().collect();
838934
let b: TrieSet = vec![3, 4, 5].into_iter().collect();
839935

840-
let set: TrieSet = a | b;
936+
let set: TrieSet = &a | &b;
841937
let v: Vec<uint> = set.iter().collect();
842938
assert_eq!(v, vec![1u, 2, 3, 4, 5]);
843939
}
@@ -847,7 +943,7 @@ mod test {
847943
let a: TrieSet = vec![1, 2, 3].into_iter().collect();
848944
let b: TrieSet = vec![2, 3, 4].into_iter().collect();
849945

850-
let set: TrieSet = a & b;
946+
let set: TrieSet = &a & &b;
851947
let v: Vec<uint> = set.iter().collect();
852948
assert_eq!(v, vec![2u, 3]);
853949
}
@@ -857,7 +953,7 @@ mod test {
857953
let a: TrieSet = vec![1, 2, 3].into_iter().collect();
858954
let b: TrieSet = vec![3, 4, 5].into_iter().collect();
859955

860-
let set: TrieSet = a ^ b;
956+
let set: TrieSet = &a ^ &b;
861957
let v: Vec<uint> = set.iter().collect();
862958
assert_eq!(v, vec![1u, 2, 4, 5]);
863959
}
@@ -867,7 +963,7 @@ mod test {
867963
let a: TrieSet = vec![1, 2, 3].into_iter().collect();
868964
let b: TrieSet = vec![3, 4, 5].into_iter().collect();
869965

870-
let set: TrieSet = a - b;
966+
let set: TrieSet = &a - &b;
871967
let v: Vec<uint> = set.iter().collect();
872968
assert_eq!(v, vec![1u, 2]);
873969
}

0 commit comments

Comments
 (0)