io.streams.sequence: faster stream-read-until.

db4
John Benediktsson 2012-07-11 18:26:41 -07:00
parent 09ea62edf6
commit a642f39a9a
1 changed files with 9 additions and 9 deletions
core/io/streams/sequence

View File

@ -23,23 +23,23 @@ SLOT: i
: <sequence-copy> ( dest n i src -- n copy )
[ 0 ] 3curry dip <copy> ; inline
: (sequence-read) ( n buf stream -- count )
: (sequence-read-unsafe) ( n buf stream -- count )
[ (sequence-read-length) ]
[ [ dup pick + ] change-i underlying>> ] bi
[ <sequence-copy> (copy) drop ] 2curry keep ; inline
: sequence-read-unsafe ( n buf stream -- count )
dup >sequence-stream< bounds-check?
[ (sequence-read) ] [ 3drop 0 ] if ; inline
[ (sequence-read-unsafe) ] [ 3drop 0 ] if ; inline
: find-sep ( seps stream -- sep/f n )
swap [ >sequence-stream< swap tail-slice ] dip
[ member-eq? ] curry [ find swap ] curry keep
over [ drop ] [ nip length ] if ; inline
: find-separator ( seps stream -- sep/f n )
swap [ >sequence-stream< ] dip
[ member-eq? ] curry [ find-from swap ] curry 2keep
pick [ drop - ] [ length swap - nip ] if ; inline
: sequence-read-until ( separators stream -- seq sep/f )
[ find-sep ] keep
[ [ sequence-read-unsafe ] (read-into-new) ] [ next ] bi swap ; inline
: sequence-read-until ( seps stream -- seq sep/f )
[ find-separator ] keep
[ [ (sequence-read-unsafe) ] (read-into-new) ] [ next ] bi swap ; inline
! Writers
M: growable dispose drop ;