concurrency.combinators: adding parallel words for cartesian-{map,each}.

db4
John Benediktsson 2013-10-12 11:03:46 -07:00
parent adc3ee4c81
commit 3d2cd564bf
2 changed files with 21 additions and 5 deletions

View File

@ -34,10 +34,16 @@ $nl
parallel-each
2parallel-each
parallel-map
parallel-product-map
2parallel-map
parallel-filter
}
"Concurrent product sequence combinators:"
{ $subsections
parallel-product-each
parallel-cartesian-each
parallel-product-map
parallel-cartesian-map
}
"Concurrent cleave combinators:"
{ $subsections
parallel-cleave

View File

@ -1,7 +1,8 @@
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: combinators concurrency.count-downs concurrency.futures
fry generalizations kernel macros sequences sequences.product ;
USING: arrays combinators concurrency.count-downs
concurrency.futures fry generalizations kernel macros sequences
sequences.private sequences.product ;
IN: concurrency.combinators
<PRIVATE
@ -21,6 +22,12 @@ PRIVATE>
'[ _ 2curry _ spawn-stage ] 2each
] (parallel-each) ; inline
: parallel-product-each ( seq quot: ( elt -- ) -- )
[ <product-sequence> ] dip parallel-each ;
: parallel-cartesian-each ( seq1 seq2 quot: ( elt1 elt2 -- ) -- )
[ 2array ] dip [ first2-unsafe ] prepose parallel-product-each ;
: parallel-filter ( seq quot: ( elt -- ? ) -- newseq )
over [ selector [ parallel-each ] dip ] dip like ; inline
@ -36,11 +43,14 @@ PRIVATE>
: parallel-map ( seq quot: ( elt -- newelt ) -- newseq )
[future] map future-values ; inline
: 2parallel-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq )
'[ _ 2curry future ] 2map future-values ;
: parallel-product-map ( seq quot: ( elt -- newelt ) -- newseq )
[ <product-sequence> ] dip parallel-map ;
: 2parallel-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq )
'[ _ 2curry future ] 2map future-values ;
: parallel-cartesian-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq )
[ 2array ] dip [ first2-unsafe ] prepose parallel-product-map ;
<PRIVATE