]> gitweb.factorcode.org Git - factor.git/commitdiff
concurrency.combinators: adding parallel words for cartesian-{map,each}.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 12 Oct 2013 18:03:46 +0000 (11:03 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 12 Oct 2013 18:03:46 +0000 (11:03 -0700)
basis/concurrency/combinators/combinators-docs.factor
basis/concurrency/combinators/combinators.factor

index e0071ce8ddb9162fc18b0a706454f98e7a77381b..d909ddbeba6c8315f8615de553b4dd975de8ec0d 100644 (file)
@@ -34,10 +34,16 @@ $nl
     parallel-each\r
     2parallel-each\r
     parallel-map\r
-    parallel-product-map\r
     2parallel-map\r
     parallel-filter\r
 }\r
+"Concurrent product sequence combinators:"\r
+{ $subsections\r
+    parallel-product-each\r
+    parallel-cartesian-each\r
+    parallel-product-map\r
+    parallel-cartesian-map\r
+}\r
 "Concurrent cleave combinators:"\r
 { $subsections\r
     parallel-cleave\r
index 537b9c043dd84149cfc81e2334fc9e808b005380..9e460619db781d8f1a5880751e1bf081418016da 100644 (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