# Input and output streams of characters
module stream
-intrude import text::ropes
import error
intrude import bytes
import codecs
var s = read_all_bytes
var slen = s.length
if slen == 0 then return ""
- var rets = ""
- var pos = 0
- var str = s.items.clean_utf8(slen)
- slen = str.byte_length
- var sits = str.items
- var remsp = slen
- while pos < slen do
- # The 129 size was decided more or less arbitrarily
- # It will require some more benchmarking to compute
- # if this is the best size or not
- var chunksz = 129
- if chunksz > remsp then
- rets += new FlatString.with_infos(sits, remsp, pos)
- break
- end
- var st = sits.find_beginning_of_char_at(pos + chunksz - 1)
- var byte_length = st - pos
- rets += new FlatString.with_infos(sits, byte_length, pos)
- pos = st
- remsp -= byte_length
- end
- if rets isa Concat then return rets.balance
- return rets
+ return codec.decode_string(s.items, s.length)
end
# Read all the stream until the eof.