io.streams.c: faster M\ c-reader stream-read-until.
parent
0d9316f4f9
commit
86cff7b921
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2004, 2010 Slava Pestov.
|
! Copyright (C) 2004, 2010 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien alien.strings byte-arrays destructors io
|
USING: accessors alien alien.strings byte-arrays byte-vectors
|
||||||
io.backend io.encodings.utf8 io.files kernel kernel.private
|
destructors io io.backend io.encodings.utf8 io.files kernel
|
||||||
make math sequences threads.private ;
|
kernel.private math sequences threads.private ;
|
||||||
IN: io.streams.c
|
IN: io.streams.c
|
||||||
|
|
||||||
TUPLE: c-stream < disposable handle ;
|
TUPLE: c-stream < disposable handle ;
|
||||||
|
@ -18,7 +18,8 @@ INSTANCE: c-writer file-writer
|
||||||
|
|
||||||
: <c-writer> ( handle -- stream ) c-writer new-c-stream ;
|
: <c-writer> ( handle -- stream ) c-writer new-c-stream ;
|
||||||
|
|
||||||
M: c-writer stream-write1 dup check-disposed handle>> fputc ;
|
M: c-writer stream-write1
|
||||||
|
dup check-disposed handle>> fputc ;
|
||||||
|
|
||||||
M: c-writer stream-write
|
M: c-writer stream-write
|
||||||
dup check-disposed
|
dup check-disposed
|
||||||
|
@ -32,20 +33,23 @@ INSTANCE: c-reader file-reader
|
||||||
|
|
||||||
: <c-reader> ( handle -- stream ) c-reader new-c-stream ;
|
: <c-reader> ( handle -- stream ) c-reader new-c-stream ;
|
||||||
|
|
||||||
M: c-reader stream-read-unsafe dup check-disposed handle>> fread-unsafe ;
|
M: c-reader stream-read-unsafe
|
||||||
|
dup check-disposed handle>> fread-unsafe ;
|
||||||
|
|
||||||
M: c-reader stream-read1 dup check-disposed handle>> fgetc ;
|
M: c-reader stream-read1
|
||||||
|
dup check-disposed handle>> fgetc ;
|
||||||
|
|
||||||
: read-until-loop ( stream delim -- ch )
|
: read-until-loop ( handle seps accum -- accum ch )
|
||||||
over stream-read1 dup [
|
pick fgetc dup [
|
||||||
dup pick member-eq? [ 2nip ] [ , read-until-loop ] if
|
pick dupd member-eq?
|
||||||
|
[ [ 2drop ] 2dip ] [ over push read-until-loop ] if
|
||||||
] [
|
] [
|
||||||
2nip
|
[ 2drop ] 2dip
|
||||||
] if ; inline recursive
|
] if ; inline recursive
|
||||||
|
|
||||||
M: c-reader stream-read-until
|
M: c-reader stream-read-until
|
||||||
dup check-disposed
|
dup check-disposed handle>> swap
|
||||||
[ swap read-until-loop ] B{ } make swap
|
32 <byte-vector> read-until-loop [ B{ } like ] dip
|
||||||
over empty? over not and [ 2drop f f ] when ;
|
over empty? over not and [ 2drop f f ] when ;
|
||||||
|
|
||||||
M: c-io-backend init-io ;
|
M: c-io-backend init-io ;
|
||||||
|
|
Loading…
Reference in New Issue