mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-09 14:25:24 +00:00
Removing par.rs, since it's not usable now anyway.
This commit is contained in:
parent
5a4e2ae706
commit
24431520bf
@ -1,103 +0,0 @@
|
|||||||
import comm::port;
|
|
||||||
import comm::chan;
|
|
||||||
import comm::send;
|
|
||||||
import comm::recv;
|
|
||||||
import task::spawn;
|
|
||||||
|
|
||||||
export future;
|
|
||||||
export map;
|
|
||||||
export alli;
|
|
||||||
|
|
||||||
iface future<T: send> {
|
|
||||||
fn get() -> T;
|
|
||||||
}
|
|
||||||
|
|
||||||
type future_<T: send> = {
|
|
||||||
mut slot : option<T>,
|
|
||||||
port : port<T>,
|
|
||||||
};
|
|
||||||
|
|
||||||
impl<T: send> of future<T> for future_<T> {
|
|
||||||
fn get() -> T {
|
|
||||||
alt(self.slot) {
|
|
||||||
some(x) { x }
|
|
||||||
none {
|
|
||||||
let x = recv(self.port);
|
|
||||||
self.slot = some(x);
|
|
||||||
x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[doc="Executes a bit of code asynchronously.
|
|
||||||
|
|
||||||
Returns a handle that can be used to retrieve the result at your
|
|
||||||
leisure."]
|
|
||||||
fn future<T: send>(thunk : fn~() -> T) -> future<T> {
|
|
||||||
let p = port();
|
|
||||||
let c = chan(p);
|
|
||||||
|
|
||||||
spawn() {||
|
|
||||||
send(c, thunk());
|
|
||||||
}
|
|
||||||
|
|
||||||
{mut slot: none::<T>, port : p} as future::<T>
|
|
||||||
}
|
|
||||||
|
|
||||||
#[doc="The maximum number of tasks this module will spawn for a single
|
|
||||||
operationg."]
|
|
||||||
const max_tasks : uint = 32u;
|
|
||||||
|
|
||||||
#[doc="The minimum number of elements each task will process."]
|
|
||||||
const min_granularity : uint = 1024u;
|
|
||||||
|
|
||||||
#[doc="An internal helper to map a function over a large vector and
|
|
||||||
return the intermediate results.
|
|
||||||
|
|
||||||
This is used to build most of the other parallel vector functions,
|
|
||||||
like map or alli."]
|
|
||||||
fn map_slices<A: send, B: send>(xs: [A], f: fn~(uint, [A]) -> B) -> [B] {
|
|
||||||
let len = xs.len();
|
|
||||||
if len < min_granularity {
|
|
||||||
// This is a small vector, fall back on the normal map.
|
|
||||||
[f(0u, xs)]
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
let num_tasks = uint::min(max_tasks, len / min_granularity);
|
|
||||||
|
|
||||||
let items_per_task = len / num_tasks;
|
|
||||||
|
|
||||||
let mut futures = [];
|
|
||||||
let mut base = 0u;
|
|
||||||
while base < len {
|
|
||||||
let slice = vec::slice(xs, base,
|
|
||||||
uint::min(len, base + items_per_task));
|
|
||||||
futures += [future() {|copy base|
|
|
||||||
f(base, slice)
|
|
||||||
}];
|
|
||||||
base += items_per_task;
|
|
||||||
}
|
|
||||||
|
|
||||||
futures.map() {|ys|
|
|
||||||
ys.get()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[doc="A parallel version of map."]
|
|
||||||
fn map<A: send, B: send>(xs: [A], f: fn~(A) -> B) -> [B] {
|
|
||||||
vec::concat(map_slices(xs) {|_base, slice|
|
|
||||||
map(slice, f)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
#[doc="Returns true if the function holds for all elements in the vector."]
|
|
||||||
fn alli<A: send>(xs: [A], f: fn~(uint, A) -> bool) -> bool {
|
|
||||||
vec::all(map_slices(xs) {|base, slice|
|
|
||||||
slice.alli() {|i, x|
|
|
||||||
f(i + base, x)
|
|
||||||
}
|
|
||||||
}) {|x| x }
|
|
||||||
}
|
|
@ -19,7 +19,6 @@ export bitv, deque, fun_treemap, list, map, smallintmap, sort, treemap;
|
|||||||
export rope, arena;
|
export rope, arena;
|
||||||
export ebml, dbg, getopts, json, rand, sha1, term, time, prettyprint;
|
export ebml, dbg, getopts, json, rand, sha1, term, time, prettyprint;
|
||||||
export test, tempfile, serialization;
|
export test, tempfile, serialization;
|
||||||
export par;
|
|
||||||
|
|
||||||
// General io and system-services modules
|
// General io and system-services modules
|
||||||
|
|
||||||
@ -59,7 +58,6 @@ mod getopts;
|
|||||||
mod json;
|
mod json;
|
||||||
mod sha1;
|
mod sha1;
|
||||||
mod md4;
|
mod md4;
|
||||||
mod par;
|
|
||||||
mod tempfile;
|
mod tempfile;
|
||||||
mod term;
|
mod term;
|
||||||
mod time;
|
mod time;
|
||||||
|
Loading…
Reference in New Issue
Block a user