From: Slava Pestov Date: Sat, 28 Feb 2009 23:06:55 +0000 (-0600) Subject: Merge OneEyed's patch X-Git-Tag: 0.94~2191^2~124 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=25a877e50b55c7e6ed75ba8c49de12434237ad23 Merge OneEyed's patch --- 25a877e50b55c7e6ed75ba8c49de12434237ad23 diff --cc basis/io/streams/string/string-tests.factor index a6502046c8,0000000000..967c0d4613 mode 100644,000000..100644 --- a/basis/io/streams/string/string-tests.factor +++ b/basis/io/streams/string/string-tests.factor @@@ -1,59 -1,0 +1,59 @@@ +USING: io.streams.string io kernel arrays namespaces make +tools.test ; +IN: io.streams.string.tests + +[ "line 1" CHAR: l ] +[ + "line 1\nline 2\nline 3" + dup stream-readln swap stream-read1 +] +unit-test + +[ f ] +[ "" stream-readln ] +unit-test + +[ "xyzzy" ] [ [ "xyzzy" write ] with-string-writer ] unit-test + - [ "a" ] [ 1 SBUF" cba" stream-read ] unit-test - [ "ab" ] [ 2 SBUF" cba" stream-read ] unit-test - [ "abc" ] [ 3 SBUF" cba" stream-read ] unit-test - [ "abc" ] [ 4 SBUF" cba" stream-read ] unit-test ++[ "a" ] [ 1 "abc" stream-read ] unit-test ++[ "ab" ] [ 2 "abc" stream-read ] unit-test ++[ "abc" ] [ 3 "abc" stream-read ] unit-test ++[ "abc" ] [ 4 "abc" stream-read ] unit-test +[ "abc" f ] [ - 3 SBUF" cba" [ stream-read ] keep stream-read1 ++ 3 "abc" [ stream-read ] keep stream-read1 +] unit-test + +[ + { + { "It seems " CHAR: J } + { "obs has lost h" CHAR: i } + { "s grasp on reality again.\n" f } + } +] [ + [ + "It seems Jobs has lost his grasp on reality again.\n" + [ + "J" read-until 2array , + "i" read-until 2array , + "X" read-until 2array , + ] with-input-stream + ] { } make +] unit-test + +[ "hello" "hi" ] [ + "hello\nhi" + dup stream-readln + 2 rot stream-read +] unit-test + +[ "hello" "hi" ] [ + "hello\r\nhi" + dup stream-readln + 2 rot stream-read +] unit-test + +[ "hello" "hi" ] [ + "hello\rhi" + dup stream-readln + 2 rot stream-read +] unit-test diff --cc basis/io/streams/string/string.factor index 4582490726,0000000000..73bf5f5efe mode 100644,000000..100644 --- a/basis/io/streams/string/string.factor +++ b/basis/io/streams/string/string.factor @@@ -1,67 -1,0 +1,45 @@@ - ! Copyright (C) 2003, 2009 Slava Pestov. ++! Copyright (C) 2003, 2009 Slava Pestov, Daniel Ehrenberg. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors io kernel math namespaces sequences sbufs - strings generic splitting continuations destructors - io.streams.plain io.encodings math.order growable ; ++strings generic splitting continuations destructors sequences.private ++io.streams.plain io.encodings math.order growable io.streams.sequence ; +IN: io.streams.string + +> like ; - - : growable-read-until ( growable n -- str ) - >fixnum dupd tail-slice swap harden-as dup reverse-here ; - +SINGLETON: null-encoding + +M: null-encoding decode-char drop stream-read1 ; + +PRIVATE> + +M: growable dispose drop ; + +M: growable stream-write1 push ; +M: growable stream-write push-all ; +M: growable stream-flush drop ; + +: ( -- stream ) + 512 ; + +: with-string-writer ( quot -- str ) + swap [ output-stream get ] compose with-output-stream* + >string ; inline + - M: growable stream-read1 [ f ] [ pop ] if-empty ; - - : find-last-sep ( seq seps -- n ) - swap [ memq? ] curry find-last drop ; - - M: growable stream-read-until - [ find-last-sep ] keep over [ - [ swap 1+ growable-read-until ] 2keep [ nth ] 2keep - set-length - ] [ - [ swap drop 0 growable-read-until f like f ] keep - delete-all - ] if ; ++! New implementation + - M: growable stream-read - [ - drop f - ] [ - [ length swap - 0 max ] keep - [ swap growable-read-until ] 2keep - set-length - ] if-empty ; ++TUPLE: string-reader { underlying string read-only } { i array-capacity } ; + - M: growable stream-read-partial - stream-read ; ++M: string-reader stream-read-partial stream-read ; ++M: string-reader stream-read sequence-read ; ++M: string-reader stream-read1 sequence-read1 ; ++M: string-reader stream-read-until sequence-read-until ; ++M: string-reader dispose drop ; + +: ( str -- stream ) - >sbuf dup reverse-here null-encoding ; ++ 0 string-reader boa null-encoding ; + +: with-string-reader ( str quot -- ) + [ ] dip with-input-stream ; inline + +INSTANCE: growable plain-writer