From bbe03da9c6bad23d8e09077461c1616872e1aca0 Mon Sep 17 00:00:00 2001 From: =Mark Sinclair Date: Sun, 14 Jul 2013 13:18:50 -0400 Subject: Stripped trailing spaces; Implemented FromIterator for TreeMap and PriorityQueue --- src/libextra/priority_queue.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/libextra/priority_queue.rs') diff --git a/src/libextra/priority_queue.rs b/src/libextra/priority_queue.rs index 1f7ba9f6530..58bf4ba9247 100644 --- a/src/libextra/priority_queue.rs +++ b/src/libextra/priority_queue.rs @@ -16,6 +16,7 @@ use std::unstable::intrinsics::{move_val_init, init}; use std::util::{replace, swap}; use std::vec; +use std::iterator::FromIterator; /// A priority queue implemented with a binary heap pub struct PriorityQueue { @@ -191,6 +192,21 @@ impl<'self, T> Iterator<&'self T> for PriorityQueueIterator<'self, T> { fn size_hint(&self) -> (uint, Option) { self.iter.size_hint() } } +impl> FromIterator for PriorityQueue { + pub fn from_iterator(iter: &mut Iter) -> PriorityQueue { + let (lower, _) = iter.size_hint(); + + let mut q = PriorityQueue::new(); + q.reserve_at_least(lower); + + for iter.advance |elem| { + q.push(elem); + } + + q + } +} + #[cfg(test)] mod tests { use sort::merge_sort; @@ -341,4 +357,15 @@ mod tests { #[should_fail] #[ignore(cfg(windows))] fn test_empty_replace() { let mut heap = PriorityQueue::new(); heap.replace(5); } + + #[test] + fn test_from_iter() { + let xs = ~[9u, 8, 7, 6, 5, 4, 3, 2, 1]; + + let mut q: PriorityQueue = xs.rev_iter().transform(|&x| x).collect(); + + for xs.iter().advance |&x| { + assert_eq!(q.pop(), x); + } + } } -- cgit 1.4.1-3-g733a5