diff options
Diffstat (limited to 'src/rustdoc/par.rs')
| -rw-r--r-- | src/rustdoc/par.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/rustdoc/par.rs b/src/rustdoc/par.rs new file mode 100644 index 00000000000..861dea83bc6 --- /dev/null +++ b/src/rustdoc/par.rs @@ -0,0 +1,31 @@ +export anymap, seqmap, parmap; + +fn anymap<T:send, U:send>(v: [T], f: fn(T) -> U) -> [U] { + seqmap(v, f) +} + +fn seqmap<T, U>(v: [T], f: fn(T) -> U) -> [U] { + vec::map(v, f) +} + +fn parmap<T:send, U:send>(v: [T], f: fn~(T) -> U) -> [U] unsafe { + let futures = vec::map(v) {|elt| + let po = comm::port(); + let ch = comm::chan(po); + let addr = ptr::addr_of(elt); + task::spawn {|| + comm::send(ch, f(*addr)); + } + po + }; + vec::map(futures) {|future| + comm::recv(future) + } +} + +#[test] +fn test_parallel_map() { + let i = [1, 2, 3, 4]; + let j = parmap(i) {|e| e + 1 }; + assert j == [2, 3, 4, 5]; +} \ No newline at end of file |
