disposed ;
: <buffer> ( n -- buffer )
- dup malloc 0 0 f buffer boa ;
+ dup malloc 0 0 f buffer boa ; inline
-M: buffer dispose* ptr>> free ;
+M: buffer dispose* ptr>> free ; inline
: buffer-reset ( n buffer -- )
- swap >>fill 0 >>pos drop ;
+ swap >>fill 0 >>pos drop ; inline
: buffer-capacity ( buffer -- n )
[ size>> ] [ fill>> ] bi - >fixnum ; inline
M: input-port stream-element-type drop +byte+ ; inline
: <input-port> ( handle -- input-port )
- input-port <buffered-port> ;
+ input-port <buffered-port> ; inline
HOOK: (wait-to-read) io-backend ( port -- )
[ buffer>> buffer-read-unsafe ]
} cond ;
+HINTS: read-step { fixnum input-port } ;
+
: prepare-read ( count stream -- count stream )
dup check-disposed [ 0 max >fixnum ] dip ; inline
[ swap ] dip prepare-read read-step
[ swap [ memcpy ] keep ] [ 2drop 0 ] if* ;
+HINTS: M\ input-port stream-read-unsafe
+ { fixnum byte-array input-port }
+ { fixnum string input-port } ;
+
:: read-loop ( n-remaining n-read port dst -- n-total )
n-remaining 0 > [
n-remaining port read-step :> ( n-buffered ptr )
] if
] [ 0 ] if ;
+HINTS: M\ input-port stream-read-unsafe
+ { fixnum byte-array input-port }
+ { fixnum string input-port } ;
+
: read-until-step ( separators port -- string/f separator/f )
dup wait-to-read [ 2drop f f ] [ buffer>> buffer-until ] if ;