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
parent
f31fb8a968
commit
5a3537b90a
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ;
|
||||
|
|
|
@ -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 ;
|
||||
|
|
Loading…
Reference in New Issue