about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-04-10 11:31:01 -0700
committerbors <bors@rust-lang.org>2013-04-10 11:31:01 -0700
commit11f5f73b2b7b287cee16d300a10b1c50776c38d6 (patch)
treeab49c4d6e1186c62ed5f917a54dd44f422f75f30
parent2c649830be732bc0af585ba4ef54b2c6555b7c1c (diff)
parent24eee5296bd8ec29285f65ef180d9cc9a9a391bf (diff)
downloadrust-11f5f73b2b7b287cee16d300a10b1c50776c38d6.tar.gz
rust-11f5f73b2b7b287cee16d300a10b1c50776c38d6.zip
auto merge of #5818 : Kimundi/rust/iter_to_vec, r=catamorphism
-rw-r--r--src/libcore/iter.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index 7ed4c3c36ea..9c704fbd699 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -344,3 +344,29 @@ pub fn copy_seq<T:Copy,IT:BaseIter<T>,BT:Buildable<T>>(v: &IT) -> BT {
         for v.each |x| { push(*x); }
     }
 }
+
+/**
+ * Helper function to transform an internal iterator into an owned vector.
+ *
+ * # Example:
+ *
+ * ~~~
+ * let v = ~[1, 2, 3];
+ * let v2 = do iter_to_vec |f| { v.each(|e| f(*e)) };
+ * if v != v2 { fail!() }
+ * ~~~
+ */
+#[inline(always)]
+pub fn iter_to_vec<T>(pusher: &fn(it: &fn(T) -> bool)) -> ~[T] {
+    let mut v = ~[];
+    let pushf = |e| {v.push(e); true};
+    pusher(pushf);
+    v
+}
+
+#[test]
+fn test_iter_to_vec() {
+    let v = ~[1, 2, 3];
+    let v2 = do iter_to_vec |f| { v.each(|e| f(*e)) };
+    if v != v2 { fail!() }
+}