diff options
| author | bors <bors@rust-lang.org> | 2014-08-02 13:51:09 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-08-02 13:51:09 +0000 |
| commit | 87bc22f587f1a18b447c4fa3cf967bbc0f7e7e17 (patch) | |
| tree | 22978be8a2db66a5ee728afec142807f4be7178b | |
| parent | 5bad333fec6577e9581b1925ec1d8f25ec65b9f0 (diff) | |
| parent | a0438143dec68fea83e3e4d28c120f7d14a9572d (diff) | |
| download | rust-87bc22f587f1a18b447c4fa3cf967bbc0f7e7e17.tar.gz rust-87bc22f587f1a18b447c4fa3cf967bbc0f7e7e17.zip | |
auto merge of #16177 : nham/rust/collections_15294_eq_ord, r=alexcrichton
This implements: - Eq and Ord for DList, RingBuf, TreeMap and TreeSet - FromIterator and Extendable for BitvSet cc #15294
| -rw-r--r-- | src/libcollections/bitv.rs | 28 | ||||
| -rw-r--r-- | src/libcollections/dlist.rs | 9 | ||||
| -rw-r--r-- | src/libcollections/ringbuf.rs | 9 | ||||
| -rw-r--r-- | src/libcollections/treemap.rs | 18 |
4 files changed, 63 insertions, 1 deletions
diff --git a/src/libcollections/bitv.rs b/src/libcollections/bitv.rs index 3e1160b45ee..02714c728ec 100644 --- a/src/libcollections/bitv.rs +++ b/src/libcollections/bitv.rs @@ -978,6 +978,21 @@ impl Default for BitvSet { fn default() -> BitvSet { BitvSet::new() } } +impl FromIterator<bool> for BitvSet { + fn from_iter<I:Iterator<bool>>(iterator: I) -> BitvSet { + let mut ret = BitvSet::new(); + ret.extend(iterator); + ret + } +} + +impl Extendable<bool> for BitvSet { + #[inline] + fn extend<I: Iterator<bool>>(&mut self, iterator: I) { + self.get_mut_ref().extend(iterator); + } +} + impl BitvSet { /// Create a new bit vector set with initially no contents. /// @@ -1959,6 +1974,17 @@ mod tests { } #[test] + fn test_bitv_set_from_bools() { + let bools = vec![true, false, true, true]; + let a: BitvSet = bools.iter().map(|n| *n).collect(); + let mut b = BitvSet::new(); + b.insert(0); + b.insert(2); + b.insert(3); + assert_eq!(a, b); + } + + #[test] fn test_to_bools() { let bools = vec!(false, false, true, false, false, true, true, false); assert_eq!(from_bytes([0b00100110]).iter().collect::<Vec<bool>>(), bools); @@ -1977,7 +2003,7 @@ mod tests { #[test] fn test_bitv_set_iterator() { let bools = [true, false, true, true]; - let bitv = BitvSet::from_bitv(bools.iter().map(|n| *n).collect()); + let bitv: BitvSet = bools.iter().map(|n| *n).collect(); let idxs: Vec<uint> = bitv.iter().collect(); assert_eq!(idxs, vec!(0, 2, 3)); diff --git a/src/libcollections/dlist.rs b/src/libcollections/dlist.rs index 5e3ce75eb95..3d322729aab 100644 --- a/src/libcollections/dlist.rs +++ b/src/libcollections/dlist.rs @@ -683,12 +683,21 @@ impl<A: PartialEq> PartialEq for DList<A> { } } +impl<A: Eq> Eq for DList<A> {} + impl<A: PartialOrd> PartialOrd for DList<A> { fn partial_cmp(&self, other: &DList<A>) -> Option<Ordering> { iter::order::partial_cmp(self.iter(), other.iter()) } } +impl<A: Ord> Ord for DList<A> { + #[inline] + fn cmp(&self, other: &DList<A>) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl<A: Clone> Clone for DList<A> { fn clone(&self) -> DList<A> { self.iter().map(|x| x.clone()).collect() diff --git a/src/libcollections/ringbuf.rs b/src/libcollections/ringbuf.rs index 44b546f6656..0cde7a90e9c 100644 --- a/src/libcollections/ringbuf.rs +++ b/src/libcollections/ringbuf.rs @@ -452,12 +452,21 @@ impl<A: PartialEq> PartialEq for RingBuf<A> { } } +impl<A: Eq> Eq for RingBuf<A> {} + impl<A: PartialOrd> PartialOrd for RingBuf<A> { fn partial_cmp(&self, other: &RingBuf<A>) -> Option<Ordering> { iter::order::partial_cmp(self.iter(), other.iter()) } } +impl<A: Ord> Ord for RingBuf<A> { + #[inline] + fn cmp(&self, other: &RingBuf<A>) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl<S: Writer, A: Hash<S>> Hash<S> for RingBuf<A> { fn hash(&self, state: &mut S) { self.len().hash(state); diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs index 6a29a9a75b8..6299ecfc5fd 100644 --- a/src/libcollections/treemap.rs +++ b/src/libcollections/treemap.rs @@ -173,6 +173,8 @@ impl<K: PartialEq + Ord, V: PartialEq> PartialEq for TreeMap<K, V> { } } +impl<K: Eq + Ord, V: Eq> Eq for TreeMap<K, V> {} + impl<K: Ord, V: PartialOrd> PartialOrd for TreeMap<K, V> { #[inline] fn partial_cmp(&self, other: &TreeMap<K, V>) -> Option<Ordering> { @@ -180,6 +182,13 @@ impl<K: Ord, V: PartialOrd> PartialOrd for TreeMap<K, V> { } } +impl<K: Ord, V: Ord> Ord for TreeMap<K, V> { + #[inline] + fn cmp(&self, other: &TreeMap<K, V>) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl<K: Ord + Show, V: Show> Show for TreeMap<K, V> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(write!(f, "{{")); @@ -1010,6 +1019,8 @@ impl<T: PartialEq + Ord> PartialEq for TreeSet<T> { fn eq(&self, other: &TreeSet<T>) -> bool { self.map == other.map } } +impl<T: Eq + Ord> Eq for TreeSet<T> {} + impl<T: Ord> PartialOrd for TreeSet<T> { #[inline] fn partial_cmp(&self, other: &TreeSet<T>) -> Option<Ordering> { @@ -1017,6 +1028,13 @@ impl<T: Ord> PartialOrd for TreeSet<T> { } } +impl<T: Ord> Ord for TreeSet<T> { + #[inline] + fn cmp(&self, other: &TreeSet<T>) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl<T: Ord + Show> Show for TreeSet<T> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(write!(f, "{{")); |
