# close the stream
fun close is abstract
+
+ # Pre-work hook.
+ #
+ # Used to inform `self` that operations will start.
+ # Specific streams can use this to prepare some resources.
+ #
+ # Is automatically invoked at the beginning of `with` structures.
+ #
+ # Do nothing by default.
+ fun start do end
+
+ # Post-work hook.
+ #
+ # Used to inform `self` that the operations are over.
+ # Specific streams can use this to free some resources.
+ #
+ # Is automatically invoked at the end of `woth` structures.
+ #
+ # call `close` by default.
+ fun finish do close
end
# A `Stream` that can be read from
super Stream
# Decoder used to transform input bytes to UTF-8
- var decoder: Decoder = utf8_decoder is writable
+ var decoder: Codec = utf8_codec is writable
# Reads a character. Returns `null` on EOF or timeout
fun read_char: nullable Char is abstract
# if this is the best size or not
var chunksz = 129
if chunksz > remsp then
- rets += new FlatString.with_infos(sits, remsp, pos, pos + remsp - 1)
+ rets += new FlatString.with_infos(sits, remsp, pos)
break
end
var st = sits.find_beginning_of_char_at(pos + chunksz - 1)
var bytelen = st - pos
- rets += new FlatString.with_infos(sits, bytelen, pos, st - 1)
+ rets += new FlatString.with_infos(sits, bytelen, pos)
pos = st
remsp -= bytelen
end
super Stream
# The coder from a nit UTF-8 String to the output file
- var coder: Coder = utf8_coder is writable
+ var coder: Codec = utf8_codec is writable
# Writes bytes from `s`
fun write_bytes(s: Bytes) is abstract
# Write a single byte
fun write_byte(value: Byte) is abstract
+ # Writes a single char
+ fun write_char(c: Char) do write(c.to_s)
+
# Can the stream be used to write
fun is_writable: Bool is abstract
end
end
end
+redef class Bytes
+ super Writable
+ redef fun write_to(s) do s.write_bytes(self)
+
+ redef fun write_to_string do return to_s
+end
+
redef class Text
super Writable
redef fun write_to(stream) do stream.write(self)
return null
end
# TODO: Fix when supporting UTF-8
- var c = _buffer[_buffer_pos].to_i.ascii
+ var c = _buffer[_buffer_pos].to_i.code_point
_buffer_pos += 1
return c
end