1 ! Copyright (C) 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: sequences io kernel accessors math math.order ;
4 IN: io.streams.sequence
9 : >sequence-stream< ( stream -- i underlying )
10 [ i>> ] [ underlying>> ] bi ; inline
13 [ 1+ ] change-i drop ; inline
15 : sequence-read1 ( stream -- elt/f )
16 [ >sequence-stream< ?nth ]
19 : add-length ( n stream -- i+n )
20 [ i>> + ] [ underlying>> length ] bi min ; inline
22 : (sequence-read) ( n stream -- seq/f )
24 [ [ swap dup ] change-i drop ]
28 : sequence-read ( n stream -- seq/f )
29 dup >sequence-stream< bounds-check?
30 [ (sequence-read) ] [ 2drop f ] if ; inline
32 : find-sep ( seps stream -- sep/f n )
33 swap [ >sequence-stream< ] dip
34 [ memq? ] curry find-from swap ; inline
36 : sequence-read-until ( separators stream -- seq sep/f )
38 [ sequence-read ] [ next ] bi swap ; inline