io.files: add file-reader, file-writer mixins

This lets us do some trickery so that the stream-element-type propagates from <file-reader>/<file-writer>. For #376.
db4
Joe Groff 2011-11-09 14:43:39 -08:00
parent f31fb8a968
commit 5a3537b90a
4 changed files with 16 additions and 14 deletions

View File

@ -4,5 +4,5 @@ USING: io.encodings kernel ;
IN: io.encodings.binary
SINGLETON: binary
M: binary <encoder> drop ;
M: binary <decoder> drop ;
M: binary <encoder> drop ; inline
M: binary <decoder> drop ; 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
locals math math.order namespaces sequences specialized-arrays
specialized-arrays.instances.alien.c-types.uchar splitting
strings summary system typed ;
strings summary system typed io.files ;
IN: io.ports
SYMBOL: default-buffer-size
@ -30,8 +30,7 @@ TUPLE: buffered-port < port { buffer buffer } ;
TUPLE: input-port < buffered-port ;
INSTANCE: input-port input-stream
M: input-port stream-element-type drop +byte+ ; inline
INSTANCE: input-port file-reader
: <input-port> ( handle -- input-port )
input-port <buffered-port> ; inline
@ -118,6 +117,7 @@ M: input-port stream-read-until ( seps port -- str/f sep/f )
TUPLE: output-port < buffered-port ;
INSTANCE: output-port output-stream
INSTANCE: output-port file-writer
: <output-port> ( handle -- output-port )
output-port <buffered-port> ;
@ -126,8 +126,6 @@ INSTANCE: output-port output-stream
[ nip ] [ buffer>> buffer-capacity <= ] 2bi
[ drop ] [ stream-flush ] if ; inline
M: output-port stream-element-type drop +byte+ ; inline
M: output-port stream-write1
dup check-disposed
1 over wait-to-write

View File

@ -5,6 +5,12 @@ io.backend io.pathnames io.encodings io.files.private
alien.strings ;
IN: io.files
MIXIN: file-reader
MIXIN: file-writer
M: file-reader stream-element-type drop +byte+ ; inline
M: file-writer stream-element-type drop +byte+ ; inline
HOOK: (file-reader) io-backend ( path -- stream )
HOOK: (file-writer) io-backend ( path -- stream )
@ -12,13 +18,13 @@ HOOK: (file-writer) io-backend ( path -- stream )
HOOK: (file-appender) io-backend ( path -- stream )
: <file-reader> ( path encoding -- stream )
[ normalize-path (file-reader) ] dip <decoder> ;
[ normalize-path (file-reader) { file-reader } declare ] dip <decoder> ; inline
: <file-writer> ( path encoding -- stream )
[ normalize-path (file-writer) ] dip <encoder> ;
[ normalize-path (file-writer) { file-writer } declare ] dip <encoder> ; inline
: <file-appender> ( path encoding -- stream )
[ normalize-path (file-appender) ] dip <encoder> ;
[ normalize-path (file-appender) { file-writer } declare ] dip <encoder> ; inline
: file-lines ( path encoding -- seq )
<file-reader> stream-lines ;

View File

@ -15,11 +15,10 @@ M: c-stream dispose* handle>> fclose ;
TUPLE: c-writer < c-stream ;
INSTANCE: c-writer output-stream
INSTANCE: c-writer file-writer
: <c-writer> ( handle -- stream ) c-writer new-c-stream ;
M: c-writer stream-element-type drop +byte+ ;
M: c-writer stream-write1 dup check-disposed handle>> fputc ;
M: c-writer stream-write
@ -30,11 +29,10 @@ M: c-writer stream-flush dup check-disposed handle>> fflush ;
TUPLE: c-reader < c-stream ;
INSTANCE: c-reader input-stream
INSTANCE: c-reader file-reader
: <c-reader> ( handle -- stream ) c-reader new-c-stream ;
M: c-reader stream-element-type drop +byte+ ;
M: c-reader stream-read-unsafe dup check-disposed handle>> fread-unsafe ;
M: c-reader stream-read1 dup check-disposed handle>> fgetc ;