From 3e482d5f69ffb56f0503e783b50599ec0d873dec Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 9 Nov 2010 15:35:40 -0800 Subject: Implement a map2() function in std._vec --- src/lib/_vec.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/lib') diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs index 6fa0ed42..2ffe8bad 100644 --- a/src/lib/_vec.rs +++ b/src/lib/_vec.rs @@ -1,6 +1,8 @@ import vbuf = rustrt.vbuf; import std.option; +type operator2[T,U,V] = fn(&T, &U) -> V; + native "rust" mod rustrt { type vbuf; @@ -142,6 +144,22 @@ fn map[T, U](&option.operator[T,U] f, &vec[T] v) -> vec[U] { ret u; } +fn map2[T,U,V](&operator2[T,U,V] f, &vec[T] v0, &vec[U] v1) -> vec[V] { + auto v0_len = len[T](v0); + if (v0_len != len[U](v1)) { + fail; + } + + let vec[V] u = alloc[V](v0_len); + auto i = 0u; + while (i < v0_len) { + u += f(v0.(i), v1.(i)); + i += 1u; + } + + ret u; +} + // Local Variables: // mode: rust; // fill-column: 78; -- cgit v1.2.3