diff --git a/basis/io/encodings/string/string-tests.factor b/basis/io/encodings/string/string-tests.factor index ddae9c8734..2af5bfb638 100644 --- a/basis/io/encodings/string/string-tests.factor +++ b/basis/io/encodings/string/string-tests.factor @@ -1,10 +1,11 @@ ! Copyright (C) 2008 Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. USING: strings io.encodings.utf8 io.encodings.utf16 -io.encodings.string tools.test ; +io.encodings.string tools.test io.encodings.binary ; IN: io.encodings.string.tests [ "hello" ] [ "hello" utf8 decode ] unit-test +[ B{ 0 1 22 255 } ] [ B{ 0 1 22 255 } binary decode ] unit-test [ "he" ] [ "\0h\0e" utf16be decode ] unit-test [ "hello" ] [ "hello" utf8 encode >string ] unit-test diff --git a/basis/io/encodings/string/string.factor b/basis/io/encodings/string/string.factor index d8f2acaaf8..67c34fb377 100644 --- a/basis/io/encodings/string/string.factor +++ b/basis/io/encodings/string/string.factor @@ -1,16 +1,23 @@ ! Copyright (C) 2008 Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. USING: byte-vectors io io.encodings io.streams.byte-array -io.streams.string kernel locals sbufs sequences ; +io.streams.string kernel locals sbufs sequences io.private +io.encodings.binary ; IN: io.encodings.string :: decode ( byte-array encoding -- string ) - byte-array encoding :> reader - byte-array length encoding guess-decoded-length :> buf - [ reader stream-read1 dup ] [ buf push ] while drop - buf "" like ; inline + encoding binary eq? [ byte-array ] [ + byte-array encoding :> reader + byte-array length + encoding guess-decoded-length + reader stream-exemplar-growable new-resizable :> buf + [ reader stream-read1 dup ] [ buf push ] while drop + buf reader stream-exemplar like + ] if ; inline :: encode ( string encoding -- byte-array ) - string length encoding guess-encoded-length :> vec - string vec encoding stream-write - vec B{ } like ; inline + encoding binary eq? [ string ] [ + string length encoding guess-encoded-length :> vec + string vec encoding stream-write + vec B{ } like + ] if ; inline