io.streams.sequence: cleanup by moving type checks.
parent
1170df3e71
commit
bf1f4e9aa2
|
@ -10,10 +10,7 @@ INSTANCE: string-reader input-stream
|
||||||
|
|
||||||
M: string-reader stream-element-type drop +character+ ; inline
|
M: string-reader stream-element-type drop +character+ ; inline
|
||||||
|
|
||||||
M: string-reader stream-read-unsafe
|
M: string-reader stream-read-unsafe sequence-read-unsafe ;
|
||||||
[ integer>fixnum ]
|
|
||||||
[ dup string? [ "not a string" throw ] unless ]
|
|
||||||
[ sequence-read-unsafe ] tri* ;
|
|
||||||
M: string-reader stream-read1 sequence-read1 ;
|
M: string-reader stream-read1 sequence-read1 ;
|
||||||
M: string-reader stream-read-until sequence-read-until ;
|
M: string-reader stream-read-until sequence-read-until ;
|
||||||
M: string-reader stream-readln
|
M: string-reader stream-readln
|
||||||
|
|
|
@ -20,10 +20,7 @@ INSTANCE: byte-reader input-stream
|
||||||
|
|
||||||
M: byte-reader stream-element-type drop +byte+ ; inline
|
M: byte-reader stream-element-type drop +byte+ ; inline
|
||||||
|
|
||||||
M: byte-reader stream-read-unsafe
|
M: byte-reader stream-read-unsafe sequence-read-unsafe ;
|
||||||
[ integer>fixnum ]
|
|
||||||
[ dup byte-array? [ "not a byte array" throw ] unless ]
|
|
||||||
[ sequence-read-unsafe ] tri* ;
|
|
||||||
M: byte-reader stream-read1 sequence-read1 ;
|
M: byte-reader stream-read1 sequence-read1 ;
|
||||||
M: byte-reader stream-read-until sequence-read-until ;
|
M: byte-reader stream-read-until sequence-read-until ;
|
||||||
M: byte-reader dispose drop ;
|
M: byte-reader dispose drop ;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2009 Daniel Ehrenberg
|
! Copyright (C) 2009 Daniel Ehrenberg
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors combinators destructors growable io io.private
|
USING: accessors byte-arrays combinators destructors growable
|
||||||
io.streams.plain kernel math math.order sequences
|
io io.private io.streams.plain kernel math math.order sequences
|
||||||
sequences.private ;
|
sequences.private strings ;
|
||||||
IN: io.streams.sequence
|
IN: io.streams.sequence
|
||||||
|
|
||||||
! Readers
|
! Readers
|
||||||
|
@ -15,31 +15,50 @@ SLOT: i
|
||||||
: sequence-read1 ( stream -- elt/f )
|
: sequence-read1 ( stream -- elt/f )
|
||||||
dup >sequence-stream< dupd ?nth [ 1 + swap i<< ] dip ; inline
|
dup >sequence-stream< dupd ?nth [ 1 + swap i<< ] dip ; inline
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
: (sequence-read-length) ( n buf stream -- buf count )
|
: (sequence-read-length) ( n buf stream -- buf count )
|
||||||
[ underlying>> length ] [ i>> ] bi - rot min ; inline
|
[ underlying>> length ] [ i>> ] bi - rot min ; inline
|
||||||
|
|
||||||
: <sequence-copy> ( dst n i src -- n copy )
|
: <sequence-copy> ( dst n i src -- n copy )
|
||||||
[ 0 ] 3curry dip <copy> ; inline
|
[ 0 ] 3curry dip <copy> ; inline
|
||||||
|
|
||||||
: (sequence-read-unsafe) ( n buf stream -- count )
|
: ((sequence-read-unsafe)) ( n buf stream -- count )
|
||||||
[ (sequence-read-length) ]
|
[ (sequence-read-length) ]
|
||||||
[ [ dup pick + ] change-i underlying>> ] bi
|
[ [ dup pick + ] change-i underlying>> ] bi
|
||||||
[ <sequence-copy> (copy) drop ] 2curry keep ; inline
|
[ <sequence-copy> (copy) drop ] 2curry keep ; inline
|
||||||
|
|
||||||
|
: check-byte-array ( buf -- buf )
|
||||||
|
dup byte-array? [ "not a byte array" throw ] unless ; inline
|
||||||
|
|
||||||
|
: check-string ( buf -- buf )
|
||||||
|
dup string? [ "not a string" throw ] unless ; inline
|
||||||
|
|
||||||
|
: (sequence-read-unsafe) ( n buf stream -- count )
|
||||||
|
[ integer>fixnum ] 2dip dup stream-element-type +byte+ eq?
|
||||||
|
[ [ check-byte-array ] dip ((sequence-read-unsafe)) ]
|
||||||
|
[ [ check-string ] dip ((sequence-read-unsafe)) ] if ; inline
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
: sequence-read-unsafe ( n buf stream -- count )
|
: sequence-read-unsafe ( n buf stream -- count )
|
||||||
dup >sequence-stream< bounds-check?
|
dup >sequence-stream< bounds-check?
|
||||||
[ (sequence-read-unsafe) ] [ 3drop 0 ] if ; inline
|
[ (sequence-read-unsafe) ] [ 3drop 0 ] if ; inline
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
: find-separator ( seps stream -- sep/f n )
|
: find-separator ( seps stream -- sep/f n )
|
||||||
swap [ >sequence-stream< ] dip
|
>sequence-stream< rot [ member-eq? ] curry
|
||||||
[ member-eq? ] curry [ find-from swap ] curry 2keep
|
[ find-from swap ] curry 2keep pick
|
||||||
pick [ drop - ] [ length swap - nip ] if ; inline
|
[ drop - ] [ length swap - nip ] if ; inline
|
||||||
|
|
||||||
: (sequence-read-until) ( seps stream -- seq sep/f )
|
: (sequence-read-until) ( seps stream -- seq sep/f )
|
||||||
[ find-separator ] keep
|
[ find-separator ] keep
|
||||||
[ [ (sequence-read-unsafe) ] (read-into-new) ]
|
[ [ (sequence-read-unsafe) ] (read-into-new) ]
|
||||||
[ [ 1 + ] change-i drop ] bi swap ; inline
|
[ [ 1 + ] change-i drop ] bi swap ; inline
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
: sequence-read-until ( seps stream -- seq sep/f )
|
: sequence-read-until ( seps stream -- seq sep/f )
|
||||||
dup >sequence-stream< bounds-check?
|
dup >sequence-stream< bounds-check?
|
||||||
[ (sequence-read-until) ] [ 2drop f f ] if ; inline
|
[ (sequence-read-until) ] [ 2drop f f ] if ; inline
|
||||||
|
|
Loading…
Reference in New Issue