about summary refs log tree commit diff
path: root/src/lib/_vec.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-04-07 10:14:25 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-04-07 10:14:25 -0700
commit2a894cabc237f32484dd9fb4265790c60eefd661 (patch)
tree3d3b128ae9670f7b425d6cd68936482f603ca656 /src/lib/_vec.rs
parentd9da43984b5e9d50f711320d2afc3307537dfb44 (diff)
parent25320da099e375be22706b641eba35b7e35299e0 (diff)
downloadrust-2a894cabc237f32484dd9fb4265790c60eefd661.tar.gz
rust-2a894cabc237f32484dd9fb4265790c60eefd661.zip
Merge branch 'master' of github.com:graydon/rust
Diffstat (limited to 'src/lib/_vec.rs')
-rw-r--r--src/lib/_vec.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs
index f2b169efb2c..916a8205f23 100644
--- a/src/lib/_vec.rs
+++ b/src/lib/_vec.rs
@@ -1,5 +1,6 @@
 import option.none;
 import option.some;
+import util.orb;
 
 type vbuf = rustrt.vbuf;
 
@@ -230,6 +231,26 @@ fn foldl[T, U](fn (&U, &T) -> U p, &U z, &vec[T] v) -> U {
     }
 }
 
+fn unzip[T, U](&vec[tup(T, U)] v) -> tup(vec[T], vec[U]) {
+    auto sz = len[tup(T, U)](v);
+
+    if (sz == 0u) {
+        ret tup(alloc[T](0u), alloc[U](0u));
+    }
+    else {
+        auto rest = slice[tup(T, U)](v, 1u, sz);
+        auto tl   = unzip[T, U](rest);
+        auto a    = vec(v.(0)._0);
+        auto b    = vec(v.(0)._1);
+        ret tup(a + tl._0, b + tl._1);
+    }
+}
+
+fn or(&vec[bool] v) -> bool {
+    auto f = orb;
+    be _vec.foldl[bool, bool](f, false, v);
+}
+
 // Local Variables:
 // mode: rust;
 // fill-column: 78;