]> gitweb.factorcode.org Git - factor.git/blob - basis/concurrency/combinators/combinators.factor
Fix permission bits
[factor.git] / basis / concurrency / combinators / combinators.factor
1 ! Copyright (C) 2008 Slava Pestov.\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: concurrency.futures concurrency.count-downs sequences\r
4 kernel ;\r
5 IN: concurrency.combinators\r
6 \r
7 <PRIVATE\r
8 : (parallel-each) ( n quot -- )\r
9     >r <count-down> r> keep await ; inline\r
10 PRIVATE>\r
11 \r
12 : parallel-each ( seq quot -- )\r
13     over length [\r
14         [ >r curry r> spawn-stage ] 2curry each\r
15     ] (parallel-each) ; inline\r
16 \r
17 : 2parallel-each ( seq1 seq2 quot -- )\r
18     2over min-length [\r
19         [ >r 2curry r> spawn-stage ] 2curry 2each\r
20     ] (parallel-each) ; inline\r
21 \r
22 : parallel-filter ( seq quot -- newseq )\r
23     over >r pusher >r each r> r> like ; inline\r
24 \r
25 <PRIVATE\r
26 : future-values dup [ ?future ] change-each ; inline\r
27 PRIVATE>\r
28 \r
29 : parallel-map ( seq quot -- newseq )\r
30     [ curry future ] curry map future-values ;\r
31     inline\r
32 \r
33 : 2parallel-map ( seq1 seq2 quot -- newseq )\r
34     [ 2curry future ] curry 2map future-values ;\r