io.ports: make read-step TYPED:

Eliminates more dispatch. For #376.
db4
Joe Groff 2011-11-09 14:13:41 -08:00
parent 63c48aa952
commit bab801b321
2 changed files with 5 additions and 7 deletions

View File

@ -39,7 +39,7 @@ M: buffer dispose* ptr>> free ; inline
[ buffer-peek ] [ 1 swap buffer-consume ] bi ; inline [ buffer-peek ] [ 1 swap buffer-consume ] bi ; inline
: buffer-length ( buffer -- n ) : buffer-length ( buffer -- n )
[ fill>> ] [ pos>> ] bi - ; inline [ fill>> ] [ pos>> ] bi - >fixnum ; inline
: buffer@ ( buffer -- alien ) : buffer@ ( buffer -- alien )
[ pos>> ] [ ptr>> ] bi <displaced-alien> ; inline [ pos>> ] [ ptr>> ] bi <displaced-alien> ; inline

View File

@ -7,7 +7,7 @@ io.buffers io.encodings io.encodings.ascii io.encodings.binary
io.encodings.private io.encodings.utf8 io.timeouts kernel libc io.encodings.private io.encodings.utf8 io.timeouts kernel libc
locals math math.order namespaces sequences specialized-arrays locals math math.order namespaces sequences specialized-arrays
specialized-arrays.instances.alien.c-types.uchar splitting specialized-arrays.instances.alien.c-types.uchar splitting
strings summary system ; strings summary system typed ;
IN: io.ports IN: io.ports
SYMBOL: default-buffer-size SYMBOL: default-buffer-size
@ -47,15 +47,13 @@ M: input-port stream-read1
dup check-disposed dup check-disposed
dup wait-to-read [ drop f ] [ buffer>> buffer-pop ] if ; inline dup wait-to-read [ drop f ] [ buffer>> buffer-pop ] if ; inline
: read-step ( count port -- count/f ptr/f ) TYPED: read-step ( count: fixnum port: input-port -- count: fixnum ptr/f: c-ptr )
{ {
{ [ over 0 = ] [ 2drop f f ] } { [ over 0 = ] [ 2drop 0 f ] }
{ [ dup wait-to-read ] [ 2drop f f ] } { [ dup wait-to-read ] [ 2drop 0 f ] }
[ buffer>> buffer-read-unsafe ] [ buffer>> buffer-read-unsafe ]
} cond ; } cond ;
HINTS: read-step { fixnum input-port } ;
: prepare-read ( count stream -- count stream ) : prepare-read ( count stream -- count stream )
dup check-disposed [ 0 max >fixnum ] dip ; inline dup check-disposed [ 0 max >fixnum ] dip ; inline