// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
-#![feature(slicing_syntax)]
-
-use std::str::from_str;
-use std::sync::Future;
use std::{cmp, iter, mem};
+use std::thread::Thread;
fn rotate(x: &mut [i32]) {
let mut prev = x[0];
}
-fn reverse(tperm: &mut [i32], mut k: uint) {
+fn reverse(tperm: &mut [i32], k: uint) {
tperm.slice_to_mut(k).reverse()
}
let mut futures = vec![];
let k = perm.max() / N;
- for (i, j) in range(0, N).zip(iter::count(0, k)) {
+ for (_, j) in range(0, N).zip(iter::count(0, k)) {
let max = cmp::min(j+k, perm.max());
- futures.push(Future::spawn(move|| {
+ futures.push(Thread::scoped(move|| {
work(perm, j as uint, max as uint)
}))
}
let mut checksum = 0;
let mut maxflips = 0;
- for fut in futures.iter_mut() {
- let (cs, mf) = fut.get();
+ for fut in futures.into_iter() {
+ let (cs, mf) = fut.join().ok().unwrap();
checksum += cs;
maxflips = cmp::max(maxflips, mf);
}
fn main() {
let n = std::os::args().as_slice()
.get(1)
- .and_then(|arg| from_str(arg.as_slice()))
+ .and_then(|arg| arg.parse())
.unwrap_or(2i32);
let (checksum, maxflips) = fannkuch(n);