11
11
// ignore-android see #10393 #13206
12
12
// ignore-pretty
13
13
14
+ extern crate sync;
15
+
14
16
use std:: strbuf:: StrBuf ;
15
17
use std:: slice;
18
+ use sync:: Arc ;
19
+ use sync:: Future ;
16
20
17
21
static TABLE : [ u8 , ..4 ] = [ 'A' as u8 , 'C' as u8 , 'G' as u8 , 'T' as u8 ] ;
18
22
static TABLE_SIZE : uint = 2 << 16 ;
@@ -202,10 +206,9 @@ fn unpack_symbol(c: u8) -> u8 {
202
206
TABLE [ c as uint ]
203
207
}
204
208
205
- fn generate_frequencies ( frequencies : & mut Table ,
206
- mut input : & [ u8 ] ,
207
- frame : uint ) {
208
- if input. len ( ) < frame { return ; }
209
+ fn generate_frequencies ( mut input : & [ u8 ] , frame : uint ) -> Table {
210
+ let mut frequencies = Table :: new ( ) ;
211
+ if input. len ( ) < frame { return frequencies; }
209
212
let mut code = Code ( 0 ) ;
210
213
211
214
// Pull first frame.
@@ -220,6 +223,7 @@ fn generate_frequencies(frequencies: &mut Table,
220
223
frequencies. lookup ( code, BumpCallback ) ;
221
224
input = input. slice_from ( 1 ) ;
222
225
}
226
+ frequencies
223
227
}
224
228
225
229
fn print_frequencies ( frequencies : & Table , frame : uint ) {
@@ -266,20 +270,21 @@ fn main() {
266
270
} else {
267
271
get_sequence ( & mut std:: io:: stdin ( ) , ">THREE" )
268
272
} ;
269
-
270
- let mut frequencies = Table :: new ( ) ;
271
- generate_frequencies ( & mut frequencies, input. as_slice ( ) , 1 ) ;
272
- print_frequencies ( & frequencies, 1 ) ;
273
-
274
- frequencies = Table :: new ( ) ;
275
- generate_frequencies ( & mut frequencies, input. as_slice ( ) , 2 ) ;
276
- print_frequencies ( & frequencies, 2 ) ;
277
-
278
- for occurrence in OCCURRENCES . iter ( ) {
279
- frequencies = Table :: new ( ) ;
280
- generate_frequencies ( & mut frequencies,
281
- input. as_slice ( ) ,
282
- occurrence. len ( ) ) ;
283
- print_occurrences ( & mut frequencies, * occurrence) ;
273
+ let input = Arc :: new ( input) ;
274
+
275
+ let nb_freqs: Vec < ( uint , Future < Table > ) > = range ( 1 u, 3 ) . map ( |i| {
276
+ let input = input. clone ( ) ;
277
+ ( i, Future :: spawn ( proc ( ) generate_frequencies ( input. as_slice ( ) , i) ) )
278
+ } ) . collect ( ) ;
279
+ let occ_freqs: Vec < Future < Table > > = OCCURRENCES . iter ( ) . map ( |& occ| {
280
+ let input = input. clone ( ) ;
281
+ Future :: spawn ( proc ( ) generate_frequencies ( input. as_slice ( ) , occ. len ( ) ) )
282
+ } ) . collect ( ) ;
283
+
284
+ for ( i, freq) in nb_freqs. move_iter ( ) {
285
+ print_frequencies ( & freq. unwrap ( ) , i) ;
286
+ }
287
+ for ( & occ, freq) in OCCURRENCES . iter ( ) . zip ( occ_freqs. move_iter ( ) ) {
288
+ print_occurrences ( & mut freq. unwrap ( ) , occ) ;
284
289
}
285
290
}
0 commit comments