-! Copyright (C) 2008 Slava Pestov.
+! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: io.encodings io.backend io.ports io.streams.duplex
io splitting grouping sequences namespaces kernel
-destructors math concurrency.combinators accessors
+destructors math concurrency.combinators accessors fry
arrays continuations quotations system vocabs.loader combinators ;
IN: io.pipes
: <pipe> ( encoding -- stream )
[
- >r (pipe) |dispose
- [ in>> <input-port> ] [ out>> <output-port> ] bi
- r> <encoder-duplex>
+ [
+ (pipe) |dispose
+ [ in>> <input-port> ] [ out>> <output-port> ] bi
+ ] dip <encoder-duplex>
] with-destructors ;
<PRIVATE
: ?writer ( handle/f -- stream )
[ <output-port> &dispose ] [ output-stream get ] if* ;
-GENERIC: run-pipeline-element ( input-fd output-fd obj -- quot )
+GENERIC: run-pipeline-element ( input-fd output-fd obj -- result )
M: callable run-pipeline-element
[
- >r [ ?reader ] [ ?writer ] bi*
- r> with-streams*
+ [ [ ?reader ] [ ?writer ] bi* ] dip
+ '[ _ call( -- result ) ] with-streams*
] with-destructors ;
: <pipes> ( n -- pipes )
PRIVATE>
: run-pipeline ( seq -- results )
- [ length dup zero? [ drop { } ] [ 1- <pipes> ] if ] keep
+ [ length dup zero? [ drop { } ] [ 1 - <pipes> ] if ] keep
[
- >r [ first in>> ] [ second out>> ] bi
- r> run-pipeline-element
+ [ [ first in>> ] [ second out>> ] bi ] dip
+ run-pipeline-element
] 2parallel-map ;
{
- { [ os unix? ] [ "io.unix.pipes" require ] }
- { [ os winnt? ] [ "io.windows.nt.pipes" require ] }
+ { [ os unix? ] [ "io.pipes.unix" require ] }
+ { [ os winnt? ] [ "io.pipes.windows.nt" require ] }
[ ]
} cond