@@ -30,8 +30,8 @@ import std::comm::port;
30
30
import std:: comm:: recv;
31
31
import std:: comm:: send;
32
32
33
- fn map ( filename : str , emit : map_reduce:: putter ) {
34
- let f = result :: get ( io:: file_reader ( filename ) ) ;
33
+ fn map ( input : str , emit : map_reduce:: putter ) {
34
+ let f = io:: string_reader ( input ) ;
35
35
36
36
37
37
while true {
@@ -67,7 +67,7 @@ mod map_reduce {
67
67
68
68
tag reduce_proto { emit_val( int) ; done; ref; release; }
69
69
70
- fn start_mappers ( ctrl : chan < ctrl_proto > , inputs : [ str ] ) ->
70
+ fn start_mappers ( ctrl : chan < ctrl_proto > , - inputs : [ str ] ) ->
71
71
[ joinable_task ] {
72
72
let tasks = [ ] ;
73
73
for i: str in inputs {
@@ -137,7 +137,7 @@ mod map_reduce {
137
137
reduce ( key, bind get( p, ref_count, is_done) ) ;
138
138
}
139
139
140
- fn map_reduce ( inputs : [ str ] ) {
140
+ fn map_reduce ( - inputs : [ str ] ) {
141
141
let ctrl = port :: < ctrl_proto > ( ) ;
142
142
143
143
// This task becomes the master control task. It task::_spawns
@@ -147,9 +147,8 @@ mod map_reduce {
147
147
148
148
reducers = map:: new_str_hash ( ) ;
149
149
150
- let tasks = start_mappers ( chan ( ctrl) , inputs) ;
151
-
152
150
let num_mappers = vec:: len ( inputs) as int ;
151
+ let tasks = start_mappers ( chan ( ctrl) , inputs) ;
153
152
154
153
while num_mappers > 0 {
155
154
alt recv ( ctrl) {
@@ -186,24 +185,20 @@ mod map_reduce {
186
185
}
187
186
188
187
fn main ( argv : [ str ] ) {
189
- if vec:: len ( argv) < 2 u {
190
- let out = io:: stdout ( ) ;
191
-
192
- out. write_line ( #fmt[ "Usage: %s <filename> ..." , argv[ 0 ] ] ) ;
193
-
194
- // TODO: run something just to make sure the code hasn't
195
- // broken yet. This is the unit test mode of this program.
196
-
197
- ret;
198
- }
199
-
200
188
// We can get by with 8k stacks, and we'll probably exhaust our
201
189
// address space otherwise.
202
190
task:: set_min_stack ( 8192 u) ;
203
191
192
+ let inputs = if vec:: len ( argv) < 2 u {
193
+ [ input1 ( ) , input2 ( ) , input3 ( ) ]
194
+ } else {
195
+ vec:: map ( { |f| result:: get ( io:: read_whole_file_str ( f) ) } ,
196
+ vec:: slice ( argv, 1 u, vec:: len ( argv) ) )
197
+ } ;
198
+
204
199
let start = time:: precise_time_ns ( ) ;
205
200
206
- map_reduce:: map_reduce ( vec :: slice ( argv , 1 u , vec :: len ( argv ) ) ) ;
201
+ map_reduce:: map_reduce ( inputs ) ;
207
202
let stop = time:: precise_time_ns ( ) ;
208
203
209
204
let elapsed = stop - start;
@@ -309,3 +304,162 @@ fn is_alpha_upper(c: char) -> bool {
309
304
fn is_alpha ( c : char ) -> bool { is_alpha_upper ( c) || is_alpha_lower ( c) }
310
305
311
306
fn is_word_char ( c : char ) -> bool { is_alpha ( c) || is_digit ( c) || c == '_' }
307
+
308
+
309
+
310
+ fn input1 ( ) -> str { " Lorem ipsum dolor sit amet, consectetur
311
+ adipiscing elit. Vestibulum tempor erat a dui commodo congue. Proin ac
312
+ imperdiet est. Nunc volutpat placerat justo, ac euismod nisl elementum
313
+ et. Nam a eros eleifend dolor porttitor auctor a a felis. Maecenas dui
314
+ odio, malesuada eget bibendum at, ultrices suscipit enim. Sed libero
315
+ dolor, sagittis eget mattis quis, imperdiet quis diam. Praesent eu
316
+ tristique nunc. Integer blandit commodo elementum. In eros lacus,
317
+ pretium vel fermentum vitae, euismod ut nulla.
318
+
319
+ Cras eget magna tempor mauris gravida laoreet. Suspendisse venenatis
320
+ volutpat molestie. Pellentesque suscipit nisl feugiat sem blandit
321
+ venenatis. Mauris id odio nec est elementum congue sed id
322
+ diam. Maecenas viverra, mi id aliquam commodo, ipsum dolor iaculis
323
+ odio, sed fringilla neque ipsum quis orci. Pellentesque dui dolor,
324
+ faucibus a rutrum sed, faucibus a mi. In eget sodales
325
+ ipsum. Pellentesque sollicitudin dapibus diam, ac interdum tellus
326
+ porta ac.
327
+
328
+ Donec ligula mi, sodales vel cursus a, dapibus ut sapien. In convallis
329
+ tempor libero, id dapibus mi sodales quis. Suspendisse
330
+ potenti. Vestibulum feugiat bibendum bibendum. Maecenas metus magna,
331
+ consequat in mollis at, malesuada id sem. Donec interdum viverra enim
332
+ nec ornare. Donec pellentesque neque magna.
333
+
334
+ Donec euismod, ante quis tempor pretium, leo lectus ornare arcu, sed
335
+ porttitor nisl ipsum elementum lectus. Nam rhoncus dictum sapien sed
336
+ tincidunt. Integer sit amet dui orci. Quisque lectus elit, dignissim
337
+ eget mattis nec, cursus nec erat. Fusce vitae metus nulla, et mattis
338
+ quam. Nullam sit amet diam augue. Nunc non ante eu enim lacinia
339
+ condimentum ac eget lectus.
340
+
341
+ Aliquam ut pulvinar tellus. Vestibulum ante ipsum primis in faucibus
342
+ orci luctus et ultrices posuere cubilia Curae; Pellentesque non urna
343
+ urna. Nulla facilisi. Aenean in felis quis massa aliquam eleifend non
344
+ sed libero. Proin sit amet iaculis urna. In hac habitasse platea
345
+ dictumst. Aenean scelerisque aliquet dolor, sit amet viverra est
346
+ laoreet nec. Curabitur non urna a augue rhoncus pulvinar. Integer
347
+ placerat vehicula nisl sed egestas. Morbi iaculis diam at erat
348
+ sollicitudin nec interdum libero tristique. " }
349
+
350
+ fn input2 ( ) -> str { " Lorem ipsum dolor sit amet, consectetur
351
+ adipiscing elit. Proin enim nibh, scelerisque faucibus accumsan id,
352
+ feugiat id ipsum. In luctus mauris a massa consequat dignissim. Donec
353
+ sit amet sem urna. Nullam pellentesque accumsan mi, at convallis arcu
354
+ pharetra in. Quisque euismod gravida nibh in rutrum. Phasellus laoreet
355
+ elit porta augue molestie nec imperdiet quam venenatis. Maecenas et
356
+ egestas arcu. Donec vulputate mauris enim. Aenean malesuada urna sed
357
+ dui eleifend quis posuere massa malesuada. Proin varius fringilla
358
+ feugiat. Donec mollis lorem sit amet ligula blandit quis fermentum dui
359
+ eleifend. Fusce molestie sodales magna in mattis. Aenean imperdiet,
360
+ elit sit amet accumsan vehicula, velit massa semper nibh, et varius
361
+ justo sem ut orci. Sed et magna lectus. Vestibulum vehicula, tellus
362
+ non dapibus mattis, libero ligula ullamcorper odio, in interdum odio
363
+ sem at mi.
364
+
365
+ Donec ut rhoncus mi. Donec ullamcorper, sem nec laoreet ullamcorper,
366
+ metus metus accumsan orci, ac luctus est velit a dolor. Donec eros
367
+ lectus, facilisis ut volutpat sit amet, pellentesque eu
368
+ velit. Praesent eget nibh et arcu vestibulum consequat. Pellentesque
369
+ habitant morbi tristique senectus et netus et malesuada fames ac
370
+ turpis egestas. Pellentesque lectus est, rhoncus ut cursus sit amet,
371
+ hendrerit quis dui. Maecenas vel purus in tellus luctus semper vel non
372
+ orci. Proin viverra, erat eget pretium ultrices, quam quam vulputate
373
+ tortor, eu dapibus risus nunc ac ipsum. Vestibulum ante ipsum primis
374
+ in faucibus orci luctus et ultrices posuere cubilia Curae; Ut aliquet
375
+ augue volutpat arcu mattis ullamcorper. Quisque vulputate consectetur
376
+ massa, quis cursus mauris lacinia vitae. Morbi id mi eu leo accumsan
377
+ aliquet ac et arcu. Quisque risus nisi, rhoncus vulputate egestas sed,
378
+ rhoncus quis risus. Sed semper odio sed nulla accumsan vitae auctor
379
+ tortor mattis.
380
+
381
+ Vivamus vitae mauris turpis. Praesent consectetur mi non sem lacinia a
382
+ cursus sapien gravida. Aenean viverra turpis sit amet ligula
383
+ vestibulum a ornare nunc feugiat. Mauris et risus arcu. Cras dictum
384
+ porta cursus. Donec tempus laoreet eros. Nam nec turpis non dui
385
+ hendrerit laoreet eu ut ipsum. Nam in sem eget turpis lacinia euismod
386
+ eu eget nulla.
387
+
388
+ Suspendisse at varius elit. Donec consectetur pharetra massa nec
389
+ viverra. Cras vehicula lorem id sapien hendrerit tristique. Mauris
390
+ vitae mi ipsum. Suspendisse feugiat commodo iaculis. Maecenas vitae
391
+ dignissim nunc. Sed hendrerit, arcu et aliquet suscipit, urna quam
392
+ fermentum eros, vel accumsan metus quam quis risus. Praesent id eros
393
+ pulvinar tellus fringilla cursus. Sed nec vulputate ipsum. Suspendisse
394
+ sagittis, magna vitae faucibus semper, nibh felis vehicula tortor, et
395
+ molestie velit lorem ac massa.
396
+
397
+ Duis aliquam accumsan lobortis. Morbi interdum cursus risus, vel
398
+ dapibus nisl fermentum sit amet. Etiam in mauris at lectus lacinia
399
+ mollis. Proin pretium sem nibh, id scelerisque arcu. Mauris pretium
400
+ adipiscing metus. Suspendisse quis convallis augue. Aliquam sed dui
401
+ augue, vel tempor ligula. Suspendisse luctus velit quis urna suscipit
402
+ sit amet ullamcorper nunc mollis. Praesent vitae velit justo. Donec
403
+ quis risus felis. Nullam rutrum, odio non varius ornare, tortor odio
404
+ posuere felis, eget accumsan sem sapien et nunc. Fusce mi neque,
405
+ elementum non convallis eu, hendrerit id arcu. Morbi tempus tincidunt
406
+ ullamcorper. Nullam blandit, diam quis sollicitudin tincidunt, elit
407
+ justo varius lacus, aliquet luctus neque nibh quis turpis. Etiam massa
408
+ sapien, tristique ut consectetur eu, elementum vel orci. " }
409
+
410
+ fn input3 ( ) -> str { " Lorem ipsum dolor sit amet, consectetur
411
+ adipiscing elit. Pellentesque bibendum sapien ut magna fringilla
412
+ mollis. Vivamus in neque non metus faucibus accumsan eu pretium
413
+ nunc. Ut erat augue, pulvinar eget blandit nec, cursus quis
414
+ ipsum. Aliquam eu ornare risus. Mauris ipsum tortor, posuere vel
415
+ gravida ut, tincidunt eu nunc. Aenean pellentesque, justo eu aliquam
416
+ condimentum, neque eros feugiat nibh, in dictum nisi augue euismod
417
+ lectus. Nam fringilla placerat metus aliquam rutrum. Nullam dapibus
418
+ vehicula ligula ut tempor. Aliquam vehicula, diam vitae fermentum
419
+ aliquam, justo augue venenatis enim, porta euismod dolor libero in
420
+ arcu. Sed sollicitudin dictum eros non ornare. Donec nec purus
421
+ orci. Mauris euismod fringilla consequat. Praesent non erat quis risus
422
+ dapibus semper ac adipiscing lorem. Aliquam pulvinar dapibus
423
+ mollis. Donec fermentum sollicitudin metus, sit amet condimentum leo
424
+ adipiscing a.
425
+
426
+ Vestibulum mi felis, commodo placerat rhoncus sed, feugiat tincidunt
427
+ orci. Integer faucibus ornare placerat. Nam et odio massa. Suspendisse
428
+ porttitor nunc quis mi mollis imperdiet. Ut ut neque ipsum, sit amet
429
+ facilisis erat. Nam ac lacinia turpis. Vivamus ullamcorper iaculis
430
+ odio, et euismod sem imperdiet non. Duis porta felis sit amet nunc
431
+ venenatis eu vestibulum nisi scelerisque. Nullam luctus mollis nunc
432
+ vel pulvinar. Nam lorem tellus, imperdiet sed sodales eu, auctor ut
433
+ nunc.
434
+
435
+ Nulla at mauris at leo sagittis varius eu a elit. Etiam consequat,
436
+ tellus ut sagittis porttitor, est justo convallis eros, quis suscipit
437
+ justo tortor vitae sem. In in odio augue. Pellentesque habitant morbi
438
+ tristique senectus et netus et malesuada fames ac turpis
439
+ egestas. Nulla varius ornare ligula quis euismod. Maecenas lobortis
440
+ sodales sapien a mattis. Nulla blandit lobortis lacus, ut lobortis
441
+ neque dictum ut. Praesent semper laoreet nisl. Etiam arcu eros,
442
+ pretium eget eleifend eu, condimentum quis leo. Donec imperdiet porta
443
+ erat. Aenean tempor sapien ut arcu porta mollis. Duis ultrices commodo
444
+ quam venenatis commodo.
445
+
446
+ Aliquam odio tellus, tincidunt nec condimentum pellentesque, semper
447
+ eget magna. Nam et lacus urna. Pellentesque urna nisi, pharetra vitae
448
+ dignissim non, scelerisque eu massa. Sed sapien neque, cursus a
449
+ malesuada ut, porta et quam. Donec odio sapien, blandit non aliquam
450
+ vel, lobortis quis ligula. Nullam fermentum velit nec quam ultrices et
451
+ venenatis sapien congue. Pellentesque vitae nunc arcu. Nullam eget
452
+ laoreet nulla. Curabitur dignissim convallis nunc sed blandit. Sed ac
453
+ ipsum mi. Ut euismod tellus hendrerit arcu egestas sollicitudin. Nam
454
+ eget laoreet ipsum. Morbi sed nulla odio, at volutpat ante. Vivamus
455
+ elementum dictum gravida.
456
+
457
+ Phasellus diam nisi, ullamcorper et placerat non, ultrices ut
458
+ lectus. Etiam tincidunt scelerisque imperdiet. Quisque pretium pretium
459
+ urna quis cursus. Sed sit amet velit sem. Maecenas eu orci et leo
460
+ ultricies dictum. Mauris pellentesque ante a purus gravida
461
+ convallis. Integer non tellus ante. Nulla hendrerit lobortis augue sit
462
+ amet vulputate. Donec cursus hendrerit diam convallis
463
+ luctus. Curabitur ipsum mauris, fermentum quis tincidunt ac, laoreet
464
+ sollicitudin sapien. Fusce velit urna, gravida non pulvinar eu, tempor
465
+ id nunc. " }
0 commit comments