about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-07-05 17:22:02 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-07-05 17:22:02 -0700
commit8261d2e6fb32dd4e811d33b3ef40abde8e67ae3d (patch)
tree0bbf6755d2a7c70b490fedc2dd211855db879158 /src/lib
parentee5d7bbc86b63015089a4907afc4c20c1c0559c9 (diff)
downloadrust-8261d2e6fb32dd4e811d33b3ef40abde8e67ae3d.tar.gz
rust-8261d2e6fb32dd4e811d33b3ef40abde8e67ae3d.zip
stdlib: Add filter_map to ivec
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ivec.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/ivec.rs b/src/lib/ivec.rs
index c39905b3777..14c5dda83b3 100644
--- a/src/lib/ivec.rs
+++ b/src/lib/ivec.rs
@@ -171,6 +171,18 @@ fn map[T,U](fn(&T)->U f, &T[mutable?] v) -> U[] {
     ret result;
 }
 
+fn filter_map[T,U](fn(&T)->option::t[U] f, &T[mutable?] v) -> U[] {
+    auto result = ~[];
+    for (T elem in v) {
+        auto elem2 = elem;  // satisfies alias checker
+        alt (f(elem2)) {
+          case (none) { /* no-op */ }
+          case (some(?result_elem)) { result += ~[result_elem]; }
+        }
+    }
+    ret result;
+}
+
 fn any[T](fn(&T)->bool f, &T[] v) -> bool {
     for (T elem in v) { if (f(elem)) { ret true; } }
     ret false;