]> gitweb.factorcode.org Git - factor.git/commitdiff
io.files: add file-reader, file-writer mixins
authorJoe Groff <arcata@gmail.com>
Wed, 9 Nov 2011 22:43:39 +0000 (14:43 -0800)
committerJoe Groff <arcata@gmail.com>
Wed, 9 Nov 2011 22:43:39 +0000 (14:43 -0800)
This lets us do some trickery so that the stream-element-type propagates from <file-reader>/<file-writer>. For #376.

basis/io/encodings/binary/binary.factor
basis/io/ports/ports.factor
core/io/files/files.factor
core/io/streams/c/c.factor

index e54163f63270b02efb67be8f5018a0e2db185b75..8c53d36efbcf13134a98ad16926be78e47d3ebda 100644 (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
index eaae1e40a9e815d54a0031fd28260bea95fef5f9..55685a0a1d4f3a0614315bb3fcdc32943a80544b 100644 (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
index 5248a9437c60bb3734d87af7315a01df485e80bd..d1ff0ffc774270af445f866eab8f1105e836f250 100644 (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 ;
index 979d435a45ab965ef62cfd76b5c1afc16485d775..f05df81cf2c5ef948f60ac8da2906ea1dd55f5cc 100644 (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 ;