]> gitweb.factorcode.org Git - factor.git/commitdiff
concurrency.combinators: adding parallel-assoc-map.
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 21 Nov 2013 22:52:38 +0000 (14:52 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 21 Nov 2013 22:52:38 +0000 (14:52 -0800)
basis/concurrency/combinators/combinators-tests.factor
basis/concurrency/combinators/combinators.factor

index f33f6513a97330472ef301dd3cac8601419f37bf..74363e6af0d8c9f4c5fe48d831cd99b9ff172d51 100644 (file)
@@ -53,3 +53,9 @@ IN: concurrency.combinators.tests
     [ number>string ] 3 parallel-napply\r
     { [ "a" append ] [ "b" append ] [ "c" append ] } parallel-spread\r
 ] unit-test\r
+\r
+{ H{ { 0 4 } { 2 6 } { 4 8 } } } [\r
+    H{ { 1 2 } { 3 4 } { 5 6 } } [\r
+        [ 1 - ] [ 2 + ] bi*\r
+    ] parallel-assoc-map\r
+] unit-test\r
index 9e460619db781d8f1a5880751e1bf081418016da..e7c42bc64472039aee955939c431fce02be90fd2 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: arrays combinators concurrency.count-downs
+USING: arrays assocs combinators concurrency.count-downs
 concurrency.futures fry generalizations kernel macros sequences
 sequences.private sequences.product ;
 IN: concurrency.combinators
@@ -43,6 +43,14 @@ PRIVATE>
 : parallel-map ( seq quot: ( elt -- newelt ) -- newseq )
     [future] map future-values ; inline
 
+: parallel-assoc-map-as ( assoc quot: ( key value -- newkey newvalue ) exemplar -- newassoc )
+    [
+        [ 2array ] compose '[ _ 2curry future ] { } assoc>map future-values
+    ] dip assoc-like ;
+
+: parallel-assoc-map ( assoc quot: ( key value -- newkey newvalue ) -- newassoc )
+    over parallel-assoc-map-as ;
+
 : 2parallel-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq )
     '[ _ 2curry future ] 2map future-values ;