diff options
| author | bors <bors@rust-lang.org> | 2013-04-10 11:31:01 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-04-10 11:31:01 -0700 |
| commit | 11f5f73b2b7b287cee16d300a10b1c50776c38d6 (patch) | |
| tree | ab49c4d6e1186c62ed5f917a54dd44f422f75f30 | |
| parent | 2c649830be732bc0af585ba4ef54b2c6555b7c1c (diff) | |
| parent | 24eee5296bd8ec29285f65ef180d9cc9a9a391bf (diff) | |
| download | rust-11f5f73b2b7b287cee16d300a10b1c50776c38d6.tar.gz rust-11f5f73b2b7b287cee16d300a10b1c50776c38d6.zip | |
auto merge of #5818 : Kimundi/rust/iter_to_vec, r=catamorphism
| -rw-r--r-- | src/libcore/iter.rs | 26 |
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!() } +} |
