2008-02-18 10:08:59 -05:00
|
|
|
! Copyright (C) 2008 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: concurrency.futures concurrency.count-downs sequences
|
|
|
|
kernel ;
|
|
|
|
IN: concurrency.combinators
|
|
|
|
|
2008-05-06 22:23:07 -04:00
|
|
|
: (parallel-each) ( n quot -- )
|
|
|
|
>r <count-down> r> keep await ; inline
|
2008-02-18 10:08:59 -05:00
|
|
|
|
|
|
|
: parallel-each ( seq quot -- )
|
2008-05-06 22:23:07 -04:00
|
|
|
over length [
|
|
|
|
[ >r curry r> spawn-stage ] 2curry each
|
|
|
|
] (parallel-each) ; inline
|
|
|
|
|
|
|
|
: 2parallel-each ( seq1 seq2 quot -- )
|
|
|
|
2over min-length [
|
|
|
|
[ >r 2curry r> spawn-stage ] 2curry 2each
|
|
|
|
] (parallel-each) ; inline
|
2008-02-18 17:20:18 -05:00
|
|
|
|
2008-04-26 00:17:08 -04:00
|
|
|
: parallel-filter ( seq quot -- newseq )
|
2008-02-18 17:20:18 -05:00
|
|
|
over >r pusher >r each r> r> like ; inline
|
2008-05-06 22:23:07 -04:00
|
|
|
|
|
|
|
: future-values dup [ ?future ] change-each ; inline
|
|
|
|
|
|
|
|
: parallel-map ( seq quot -- newseq )
|
|
|
|
[ curry future ] curry map future-values ;
|
|
|
|
inline
|
|
|
|
|
|
|
|
: 2parallel-map ( seq1 seq2 quot -- newseq )
|
|
|
|
[ 2curry future ] curry 2map future-values ;
|