auto merge of #13575 : TeXitoi/rust/shootout-knucleotide-parallel, r=alexcrichton

This commit is contained in:
bors 2014-04-17 18:41:24 -07:00
commit 0c23140aaf
1 changed files with 22 additions and 17 deletions

View File

@ -11,8 +11,12 @@
// ignore-android see #10393 #13206
// ignore-pretty
extern crate sync;
use std::strbuf::StrBuf;
use std::slice;
use sync::Arc;
use sync::Future;
static TABLE: [u8, ..4] = [ 'A' as u8, 'C' as u8, 'G' as u8, 'T' as u8 ];
static TABLE_SIZE: uint = 2 << 16;
@ -202,10 +206,9 @@ fn unpack_symbol(c: u8) -> u8 {
TABLE[c as uint]
}
fn generate_frequencies(frequencies: &mut Table,
mut input: &[u8],
frame: uint) {
if input.len() < frame { return; }
fn generate_frequencies(mut input: &[u8], frame: uint) -> Table {
let mut frequencies = Table::new();
if input.len() < frame { return frequencies; }
let mut code = Code(0);
// Pull first frame.
@ -220,6 +223,7 @@ fn generate_frequencies(frequencies: &mut Table,
frequencies.lookup(code, BumpCallback);
input = input.slice_from(1);
}
frequencies
}
fn print_frequencies(frequencies: &Table, frame: uint) {
@ -266,20 +270,21 @@ fn main() {
} else {
get_sequence(&mut std::io::stdin(), ">THREE")
};
let input = Arc::new(input);
let mut frequencies = Table::new();
generate_frequencies(&mut frequencies, input.as_slice(), 1);
print_frequencies(&frequencies, 1);
let nb_freqs: Vec<(uint, Future<Table>)> = range(1u, 3).map(|i| {
let input = input.clone();
(i, Future::spawn(proc() generate_frequencies(input.as_slice(), i)))
}).collect();
let occ_freqs: Vec<Future<Table>> = OCCURRENCES.iter().map(|&occ| {
let input = input.clone();
Future::spawn(proc() generate_frequencies(input.as_slice(), occ.len()))
}).collect();
frequencies = Table::new();
generate_frequencies(&mut frequencies, input.as_slice(), 2);
print_frequencies(&frequencies, 2);
for occurrence in OCCURRENCES.iter() {
frequencies = Table::new();
generate_frequencies(&mut frequencies,
input.as_slice(),
occurrence.len());
print_occurrences(&mut frequencies, *occurrence);
for (i, freq) in nb_freqs.move_iter() {
print_frequencies(&freq.unwrap(), i);
}
for (&occ, freq) in OCCURRENCES.iter().zip(occ_freqs.move_iter()) {
print_occurrences(&mut freq.unwrap(), occ);
}
}