summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-03-27 12:45:42 +0200
committerMarijn Haverbeke <marijnh@gmail.com>2012-03-27 12:53:19 +0200
commiteec6383771de00bce75b0141e530d10ce5c1ac88 (patch)
treebf68dd7b1ae4744321f7d82fdb80af1ea6d4c15a /src/libstd
parent064f82d68d151c04ec39c48ad163c2edacbbf9db (diff)
downloadrust-eec6383771de00bce75b0141e530d10ce5c1ac88.tar.gz
rust-eec6383771de00bce75b0141e530d10ce5c1ac88.zip
Add vec::each, vec::eachi, and list::each
For use with the new for construct.

Issue #1619
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/list.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libstd/list.rs b/src/libstd/list.rs
index bf2f51cf82d..578fd3eec9c 100644
--- a/src/libstd/list.rs
+++ b/src/libstd/list.rs
@@ -125,6 +125,26 @@ fn iter<T>(l: list<T>, f: fn(T)) {
     }
 }
 
+#[doc = "Iterate over a list"]
+fn each<T>(l: list<T>, f: fn(T) -> bool) {
+    alt l {
+      cons(hd, tl) {
+        if !f(hd) { ret; }
+        let mut cur = tl;
+        loop {
+            alt *cur {
+              cons(hd, tl) {
+                if !f(hd) { ret; }
+                cur = tl;
+              }
+              nil { break; }
+            }
+        }
+      }
+      nil {}
+    }
+}
+
 #[cfg(test)]
 mod tests {